PHP7 下安装并使用 xhprof 性能分析工具

xhprof 的安装

该 xhprof 版本是从 https://github.com/longxinH/xhprof 获取,若有更好的选择,烦请联系我。php

cd ~
git clone https://github.com/longxinH/xhprof

安装 xhprof

cd xhprof/extension/
/opt/php-7.0.14/bin/phpize
./configure --with-php-config=/opt/php-7.0.14/bin/php-config --enable-xhprof
make
make install

出现html

Installing shared extensions:     /opt/php-7.0.14/lib/php/extensions/no-debug-non-zts-20151012/

表明编译成功git

修改 php.ini 文件

/opt/php-7.0.14/bin/php -i | grep php.ini //命令查找php.ini文件的位置

/etc/php.ini中增长以下配置github

[xhprof]
extension=xhprof.so
xhprof.output_dir=/data/www/xhprof/save_output_dir //该目录自由定义便可,用来保存xhprof生成的源文件

保存好以后,重启php-fpmcentos

kill -USR2 `cat /opt/php-7.0.14/var/run/php-fpm.pid`

将相关文件移动到项目中

//切换到下载的 xhprof 目录
cp -r xhprof/xhprof_html  ROOT_PATH/
cp -r xhprof/xhprof_lib ROOT_PATH/

使用

xhprof_enable();

//你须要分析的代码

$xhprof_data = xhprof_disable();
include_once ROOT_PATH.'/xhprof_lib/utils/xhprof_lib.php';
include_once ROOT_PATH . '/xhprof_lib/utils/xhprof_runs.php';

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test");
//将run_id保存起来或者随代码一块儿输出

查看数据

访问$host_url/xhpfrof_html/index.php?run=58d3b28b521f6&source=xhprof_test来查看结果浏览器

图形化结果

点击[View Full Callgraph]能够看图形化结果性能优化

报错

failed to execute cmd:" dot -Tpng". stderr:sh: dot:command not found。函数

//解决方案
yum install graphviz

 

若是输入浏览器没有数据这种状况:Run #530707980ee18: Invalid Run Id = 530707980ee18错误结果:error多是你的配置权限不足,请给个权限,能够直接777,而后从新运行走后这个步骤看看效果。到这里xhprof安装就结束了,开始你的性能优化之旅吧,有了这个工具会事半功倍的~~对于xhprof的名词解释:php-fpm

Function Name 函数名 工具

Calls 调用次数  Calls% 调用百分比  Incl. Wall Time (microsec) 调用的包括子函数全部花费时间 以微秒算(一百万分之一秒)  IWall% 调用的包括子函数全部花费时间的百分比  Excl. Wall Time (microsec) 函数执行自己花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒)  EWall% 函数执行自己花费的时间的百分比,不包括子树执行时间  Incl. CPU(microsecs) 调用的包括子函数全部花费的cpu时间。减Incl. Wall Time即为等待cpu的时间  减Excl. Wall Time即为等待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% 峰值百分比

错误处理:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

缘由:未安装图形化工具

yum install graphviz //centos  brew install graphviz //mac

界面优化:XHProf UI 分支

 

图示

查看图片

图示

图中红色的部分为性能比较低,耗时比较长的部分,咱们能够根据根据哪些函数被标记为红色对系统的代码进行优化

补充

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峰值百分比。


参考:

http://www.jianshu.com/p/c420ebe6ce39

http://www.php.cn/php-weizijiaocheng-376423.html

https://www.oschina.net/question/1439832_2147576