原文:http://www.phpwebgo.com/2012/04/29/243.html
一、安装xhprof:
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxvf xhprof-0.9.2.tgz
cd xhprof-0.9.2
mkdir /home/wwwroot/xhprof
cp -r xhprof_html xhprof_lib /home/wwwroot/xhprof/
cd extension/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/etc/php.ini
extension = "xhprof.so"
xhprof.output_dir=/home/wwwlogs/xhprof
mkdir /home/wwwlogs/xhprof
chmod 777 -R /home/wwwlogs/xhprof/
/etc/init.d/php-fpm restart
/etc/init.d/nginx restart
二、安装画图工具graphviz
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxvf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make && make install
三、如何使用
xhprof_enable(); // 统计的代码部分之前加,如果要显示CPU占用 可以加入XHPROF_FLAGS_CPU参数,内存是XHPROF_FLAGS_MEMORY,如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
xhprof_disable();//统计的代码部分之后加
这样xhprof就可以统计当前页面的函数性能情况了。xhprof会把每次访问加入统计代码的页面的性能统计结果在指定目录下生成一个文件,文件名命名方式为:本次访问的系统ID.命名空间,每次刷新页面都会重新生成一个文件,每个的系统ID都不同。
<?php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
$xhprof_on = true;
$obj = new getlocationip('./qqwry.dat');
for($i=0;$i<1000;$i++)
{
echo $ip = rand(10,255).'.'.rand(1,255).'.'.rand(1,255).'.'.rand(1,255);
$address = $obj->find($ip);
$str = $address ['0'].$address ['1'];
echo $str.'<hr>';
}
if($xhprof_on){
$xhprof_data = xhprof_disable();
$xhprof_root = dirname(__FILE__).'/xhprof/';
include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "hx");
echo '<a href="http://xxx.xxx.xxx.xxx/xhprof/xhprof_html/index.php?run='.$run_id.'&source=hx" target="_blank">统计</a>';
}
名词:
1. Inclusive Time :包括子函数所有执行时间。
2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
3. Wall Time:花去了的时间或挂钟时间。
4. CPU Time:用户耗的时间+内核耗的时间
5.Inclusive CPU:包括子函数一起所占用的CPU
6.Exclusive CPU:函数自身所占用的CPU
然后通过xhprof_html目录的http访问url来查看结果。如:http://app/xhprof_html/?run=运行id&source=命名空间(其中运行ID和命名空间可以根据xhprof生成的文件名来确定)
在生产环境可以按访问多少个用户来开启,比如1000个访问有一次的统计
后续:
比如xhprof的profile日志以文件形式保存到服务器,需要定时清理;查看时需要一个一个查看不太方便;由于xhprof生成的profile是一个大数组,所以保存到文件时使用了标准的php serialize,日志文件偏大,磁盘空间以及serialize存在效率问题(CPU 很high)
一些思路:可以把日志单独放到一台日志服务器上或者存入到MySQL数据库持久化存储,以后统计起来也比较方便:)

本文详细介绍XHProf性能分析工具的安装步骤及配置方法,并给出具体的PHP代码示例,帮助开发者快速上手,实现对PHP应用性能的有效监控。
997

被折叠的 条评论
为什么被折叠?



