php官方文档 http://php.net/manual/zh/book.xhprof.php
xhprof为facebook开发的php性能分析工具,一个轻量级的分层性能测量分析器。 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。 它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。
1.安装
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar -zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
2.修改php.ini(在php.ini添加以下扩展)
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof
xhprof.output_dir:储存 XHProf 运行数据的默认目录,用于接口 iXHProfRuns(即 XHProfRuns_Default 类)。 确保这个路径存在,且是可写的
3.将源码中的xhprof_html和xhprof_lib 文件夹复制到某个目录下,修改nginx配置,使其能被访问到。
如我是这样做的
cp -r /tmp/xhprof-master/xhprof_lib/ /var/www/xhprof/
cp -r /tmp/xhprof-master/xhprof_html/ /var/www/xhprof/
修改nginx,设置vhost访问/var/www/xhprof
4.重启php-fpm 或 apache
可通过phpinfo()查看是否已经正确安装xhprof扩展
php代码事例
<?php
/*
XHPROF_FLAGS_NO_BUILTINS (integer)
使得跳过所有内置(内部)函数。
XHPROF_FLAGS_CPU (integer)
使输出的性能数据中添加 CPU 数据。
XHPROF_FLAGS_MEMORY (integer)
使输出的性能数据中添加内存数据。
*/
//启动 xhprof 性能分析器
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS + XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
for ($i = 0; $i <= 1000000; $i++) {
$a = $i * $i;
}
//停止 xhprof 分析器
$xhprof_data = xhprof_disable();
$XHPROF_ROOT = "/usr/local/php5.6/lib/php";
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, "xhprof_testing");
$url = "http://xhprof.mi-hua.com:90/xhprof_html/index.php?run={$run_id}&source=xhprof_testing";
echo "<a href='{$url}' target='_blank'>{$url}</a>";
当查看[View Full Callgraph],如果提示如下错误,是因为未安装图形化工具依赖包:
failed to execute cmd: ” dot -Tpng”. stderr: `sh: dot: command not found ’
解决方法:
yum install graphviz
Function Name:方法名称。
Calls:方法被调用的次数。
Calls%:方法调用次数在同级方法总数调用次数中所占的百分比。
Incl.Wall Time(microsec):方法执行花费的时间,包括子方法的执行时间。(单位:微秒)
IWall%:方法执行花费的时间百分比。
Excl. Wall Time(microsec):方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)
EWall%:方法本身执行花费的时间百分比。
Incl. CPU(microsecs):方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)
ICpu%:方法执行花费的CPU时间百分比。
Excl. CPU(microsec):方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位:微秒)
ECPU%:方法本身执行花费的CPU时间百分比。
Incl.MemUse(bytes):方法执行占用的内存,包括子方法执行占用的内存。(单位:字节)
IMemUse%:方法执行占用的内存百分比。
Excl.MemUse(bytes):方法本身执行占用的内存,不包括子方法执行占用的内存。(单位:字节)
EMemUse%:方法本身执行占用的内存百分比。
Incl.PeakMemUse(bytes):Incl.MemUse峰值。(单位:字节)
IPeakMemUse%:Incl.MemUse峰值百分比。
Excl.PeakMemUse(bytes):Excl.MemUse峰值。单位:(字节)
EPeakMemUse%:Excl.MemUse峰值百分比。
注意:
1.需要php的另一扩展ctype
2.目前最新版本xhprof-0.9.4并不支持php7