xhprof的下载地址:https://pecl.php.net/package/xhprof
专门为php7开发的tideways xhprof: https://github.com/tideways/php-xhprof-extension
(安装过程略)
在php代码中使用xhprof:
<?php
//XHPROF_FLAGS_MEMORY 监控内存
//XHPROF_FLAGS_CPU 监控CPU
//XHPROF_FLAGS_NO_BUILTINS 内建函数排除
xhprof_enable(XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU|XHPROF_FLAGS_NO_BUILTINS);
< php code...>
print_r(xhprof_disable()); //结束分析, 并打印分析结果。
?>
上面这种方案打印出来的结果是一个数组,可读性太差。xhprof安装包提供了Web-UI工具进行展示。
将安装包解压,可以看到有两个目录:xhprof_html 和 xhprof_lib,其中xhprof_html目录下是
一个web程序,xhprof_lib是UI工具依赖的类库。
将以上两个目录及里面的文件复制到web_root/xhprof目录下,配置一下httpd.conf, 使其可以被web访问。
接下来就是配置xhprof分析结果临时保存路径:
vim /etc/php.ini 加上配置项
xhprof.output_dir=/tmp/log/xhprof #保证此目录可读写
重启php-fpm.
需要图形方式查看结果的话,还需要安装graphviz: yum install graphviz
同时,php代码也要相应地调整下:
<?php
xhprof_enable(XHPROF_FLAGS_MEMORY|XHPROF_FLAGS_CPU|XHPROF_FLAGS_NO_BUILTINS);
<php code....>
$xhprofData = xhprof_disable();
require '/webroot/xhprof/xhprof_lib/utils/xhprof_lib.php';
require '/webroot/xhprof/xhprof_lib/utils/xhprof_runs.php';
$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData, 'xhprof_test');
echo '<!-- http://localhost/xhprof/xhprof_html/index.php?run=' . $runId . '&source=xhprof_test -->';
?>
将生成的url用浏览器打开就可以看到分析数据了。
这种手动注入方式不太友好,可以借助配置auto_prepend_file和auto_append_file达到自动注入的目的。
分析结果中几个字段的含义说明:
- Function Name: 函数名
- Calls: 调用次数
- Incl. Wall Time: 函数运行时间(微秒), 包括子函数
- IWall%: 函数运行时间占比,包括子函数
- Excl. Wall Time: 函数运行时间,不包括子函数
- EWall%: 函数运行时间占比,不包括子函数。