天天看点

php xhprof 性能分析工具

1.获取源码

https://github.com/longxinH/xhprof

下载zip文件,然后执行步骤2.

2.编译安装

cd xhprof-master/extension/
sudo /usr/bin/phpize
sudo ./configure --with-php-config=/usr/bin/php-config --enable-xhprof
sudo make && make install
           

3.PHP加载

php.ini 引入 xhprof.so,并重启php-fpm
make install 成功后会得到xhprof.so的目录,/usr/lib64/php/modules/xhprof.so

修改php.ini文件, vim /etc/php.ini(路径根据自己的配置)
extension=/usr/lib64/php/modules/xhprof.so //注意so文件的路径
xhprof.output_dir=/tmp/xhprof  //此配置用于存放分析数据

sudo service php-fpm restart
           

4.检查

php -m | grep xhprof,如果输出xhprof,则说明安装成功

或者

phpinfo();

5.使用方法

在待测试代码开始部分加入:

注参数说明:

XHPROF_FLAGS_CPU 分析结果中添加 CPU 数
XHPROF_FLAGS_MEMORY 分析结果中添加内存数据
XHPROF_FLAGS_NO_BUILTINS 跳过 PHP 内置函数
           

在代码结束

$xhprof_data = xhprof_disable();
           

注:我是在laravel5 框架里使用的,并且把xhprof_lib.php,xhprof_runs.php两个文件放到app\Libs目录下,并添加namespace,这里引入文件是关键,否则会报 Class XHProfRuns_Default not found。

$XHPROF_ROOT = base_path('app/Libs');                                                     
include_once($XHPROF_ROOT.'/xhprof_lib.php');                                                            
include_once($XHPROF_ROOT.'/xhprof_runs.php');                                                           

$xhprofRuns = new XHProfRuns_Default();                                                                  
$runId = $xhprofRuns->save_run($xhprof_data, 'xhprof_test');                                             

echo 'http://192.168.204.77:13000/index.php?run=' . $runId . '&source=xhprof_test';(http://192.168.204.77:13000是nginx搭建来访问xhprof_html目录)
           

最后输出$xhprof_data即可

当执行待测试代码时,在xhprof.output_dir=/tmp/xhprof 对应的目录下就会生成类似于 5aee7ebee4afd.xhprof_test.xhprof格式的文件,这是分析的结果数据文件。同时,也会得到url如下http://192.168.204.77:13000/index.php?run=5aee86c9b5174&source=xhprof_test,在浏览器中打开即可,列表结果出现。

php xhprof 性能分析工具

6.结果分析

如果不图形化显示,你看到的是下面这几项数据

ct 函数调用次数,

wt 花费的时间,

cpu 花费的 CPU 时间(微秒即百万分之一秒),

mu 使用的内存(bytes),

pmu 使用的内存峰值(bytes)

Incl. 表示Including(包含)的缩写

Excl. 表示Excluding(不包含)的缩写

Function Name: 函数名

Calls: 调用次数

Calls%: 调用次数的百分比(图中带有百分比符号的字段皆表示百分比)

Incl. Wall Time: 包含子函数执行的所有花费时间。单位:微秒(下同)

Excl. Wall Time: 函数本身执行所花费的时间。

Incl. CPU: 包含子函数执行的所花费的CPU时间。

Excl. CPU: 函数本身执行所花费的CPU时间。

Incl.MemUse: 包含子函数执行的所占用的内存。单位:字节(下同)

Excl.MemUse: 函数本身执行所占用的内存。

Incl.PeakMemUse: 包含子函数执行,所占用内存的峰值。

Excl.PeakMemUse: 函数本身执行所占用内存的峰值。

如果图形化展示

在 xhprof 源码包中提供了xhprof_html 和 xhprof_lib用于分析结果的图形化展示

点击列表图中的view full callgraph,就能看到整个调用链图。

php xhprof 性能分析工具

这里可能有如下报错:

Error: either we can not find profile data for run_id 4d7f0bd99a12f or

the threshold 0.01 is too small or you do not have ‘dot’ image

generation utility installed

这个错误应该会遇到,解决方法是安装graphviz

sudo yum install -y graphviz(注意版本,我的是graphviz-2.26.0,可以正常显示),原因是xhprof绘制的是png图,需要升级dot版本。