使用xhprof测试php代码性能

mac下使用xhprof测试php代码性能

准备工作

  • 安装了brew

开始工作

关于xhprof:

XHProf 是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销。原始数据收集部分是用纯C实现的,是一个名叫xhprof的 Zend扩展 。XHProf有一个简单的HTML的用户界面( PHP写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。

XHProf 报告往往可以有助于理解被执行的代码的结构。的等级性质的报告可用来确定,例如,什么链要求导致了所谓的特殊功能得到。

XHProf 可以比较两次运行的结果(又名“差异报告”)或是从多次运行得到的汇总数据。差异和汇总报告,就像单一运行报告一样,也提供“平板”以及“分层”的性能分析视图。
XHProf 是一种轻量级的性能分析工具。在数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。

XHProf 的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计

利用brew安装xhprof

1
brew install homebrew/php/php56-xhprof

然后在电脑中brew默认的安装位置会出现xhprof_html和xhprof_lib两个文件夹,将这个两个文件夹copy到你自己的www目录中你自己建立的文件夹中

1
2
cp -r xhprof_html /usr/local/www/xhprof
cp -r xhprof_lib /usr/local/www/xhprof

同时在www目录中的xhprof中建立一个xhprof_run文件夹,这里是作为测试文件的输出文件
然后在php的配置文件中配置

1
xhprof.output_dir=/usr/local/www/xhprof/xhprof_runs/

因为是使用了brew所以配置文件是在conf.d中的ext-xhprof.conf中的
以上配置完成后我们再利用Nginx配置一个现实的网站,

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name www.xhproftest.com xhproftest.com;
root /usr/local/www/xhprof/xhprof_html;
index index.html index.php;
location ~ \.php$ {
fastcgi_pass php_pool;
fastcgi_index index.php;
include fastcgi.conf;
}
}

重启php和nginx

下一步我们就是在代码中使用xhprof了,

1
2
3
4
5
6
7
8
9
xhprof_enable();//开启xhprof
‘..........'这里是你要测试的代码
$xhprof_data = xhprof_disable();//开启展示
include_once "/usr/local/www/xhprof_lib/utils/xhprof_lib.php";
include_once "/usr/local/www/xhprof_lib/utils/xhprof_runs.php";
//引入以上两个文件,这里的文件在xhprof_lib中
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof");
echo $run_id//输出的文件会根据run_id在xhprof中生成展示文件。我们可以利用run_id查看图形化输出

我们可以访问http:///index.php?run=run_id&source=xhprof这里的我们就是在Nginx配置的域名xhproftest.com,run_id就是输出的run_id
至此我们已经配置完成了

最后给出php官方文档中的地址:http://php.net/manual/zh/book.xhprof.php

  • ps:安装graphviz,生成程序运行的流程图
1
brew install graphviz

总结

有些时候php程序运行太慢了我们就可以看到到底是什么拖慢了运行速度了