php性能分析工具xhprof
XHProf是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销,XHProf数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面(PHP写成的)
xhprof安装配置
[root@news~]#wgethttp://pecl.php.net/get/xhprof-0.9.2.tgz
[root@news~]#tarzxfxhprof-0.9.2.tgz
[root@newsxhprof-0.9.2]#cdxhprof-0.9.2
[root@newsxhprof-0.9.2]#cp-rxhprof_htmlxhprof_lib/www/auto/(网站源码路径复制完成之后记得修改用户所有者权限)
[root@newsxhprof-0.9.2]#cdextension
[root@newsextension]#./configure--with-php-config=/usr/local/php/bin/phpize
[root@newsextension]#make&&makeinstall
安装完成之后修改php.ini添加(前提是你的扩展路径已经修改成extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/")
extension=xhprof.so
xhprof.output_dir=/log/xhprof
修改完成之后重新启动web服务apache重启服务nginx重启php-fpm服务
安装Graphviz:(也可以不安装,如果安装了Graphviz,XHProf会用比较牛的图形方式展现统计数据)
root@news~]#wgethttp://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
root@news~]#tarzxfgraphviz-2.24.0.tar.gz
root@news~]#cdgraphviz-2.24.0
[root@newsgraphviz-2.24.0]#./configure
[root@newsgraphviz-2.24.0]#make
[root@newsgraphviz-2.24.0]#makeinstall
安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它
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都不同。
然后通过xhprof_html目录的http访问url来查看结果。如:http://app/xhprof_html/?run=运行id&source=命名空间(其中运行ID和命名空间可以根据xhprof生成的文件名来确定)
使用XHProf:
//startprofiling
xhprof_enable();
//runprogram
....
//stopprofiler
$xhprof_data=xhprof_disable();
//
//SavingtheXHProfrun
//usingthedefaultimplementationofiXHProfRuns.
//
include_once$XHPROF_ROOT."/xhprof_lib/utils/xhprof_lib.php";
include_once$XHPROF_ROOT."/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs=newXHProfRuns_Default();
//Savetherununderanamespace"xhprof_foo".
//
//**NOTE**:
//Bydefaultsave_run()willautomaticallygenerateaunique
//runidforyou.[Youcanoverridethatbehaviorbypassing
//arunid(optionalarg)tothesave_run()methodinstead.]
//
$run_id=$xhprof_runs->save_run($xhprof_data,"xhprof_foo");
echo"---------------\n".
"AssumingyouhavesetupthehttpbasedUIfor\n".
"XHProfatsomeaddress,youcanviewrunat\n".
"http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
贴下我的一个测试文件
[root@newstrunk]#vitest.php
<?php
xhprof_enable(XHPROF_FLAGS_CPU+XHPROF_FLAGS_MEMORY);
phpinfo();
$data=xhprof_disable();
include_once"xhprof_lib/utils/xhprof_lib.php";
include_once"xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs=newXHProfRuns_Default();
$run_id=$xhprof_runs->save_run($data,"xhprof_foo");
echo"---------------\n".
"AssumingyouhavesetupthehttpbasedUIfor\n".
"XHProfatsomeaddress,youcanviewrunat\n".
"http://XXXX/xhprof_html/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
?>
之后在浏览器里面直接访问test.php的页面会在上面设定的xhprof.output_dir目录里生成名字类似52ba534254958.xhprof_foo.xhprof的数据文件,可以很方便的通过Web方式浏览效果:
http://XXXX/xhprof_html/index.php?run=52ba534254958&source=xhprof_foo
目前显示的是表格形式的显示,点击页面上的[ViewFullCallgraph],就能看到精美的图片显示了。
下面是一些参数说明
InclusiveTime包括子函数所有执行时间。
ExclusiveTime/SelfTime函数执行本身花费的时间,不包括子树执行时间。
WallTime花去了的时间或挂钟时间。
CPUTime用户耗的时间+内核耗的时间
InclusiveCPU包括子函数一起所占用的CPU
ExclusiveCPU函数自身所占用的CPU
所有参数说明
FunctionName函数名
Calls调用次数
Calls%调用百分比
Incl.WallTime(microsec)调用的包括子函数所有花费时间以微秒算(一百万分之一秒)
IWall%调用的包括子函数所有花费时间的百分比
Excl.WallTime(microsec)函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒)
EWall%函数执行本身花费的时间的百分比,不包括子树执行时间
Incl.CPU(microsecs)调用的包括子函数所有花费的cpu时间。减Incl.WallTime即为等待cpu的时间
减Excl.WallTime即为等待cpu的时间
ICpu%Incl.CPU(microsecs)的百分比
Excl.CPU(microsec)函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算(一百万分之一秒)。
ECPU%Excl.CPU(microsec)的百分比
Incl.MemUse(bytes)包括子函数执行使用的内存。
IMemUse%Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes)函数执行本身内存,以字节算
EMemUse%Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes)Incl.MemUse的峰值
IPeakMemUse%Incl.PeakMemUse(bytes)的峰值百分比
Excl.PeakMemUse(bytes)Excl.MemUse的峰值
EPeakMemUse%EMemUse%峰值百分比
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。