简介:XHProf是Facebook放出的轻量级调试工具。和Xdebug相比,XHProf更加易用和可控,尤其是生成流程图和调试数据对比的功能很好很强大。
参考:http://us2.php.net/manual/zh/book.xhprof.php
1. 安装XHProf
sudo wget http://pecl.php.net/get/xhprof-0.9.4.tgz
sudo tar zxf xhprof-0.9.4.tgz
sudo cd xhprof-0.9.4
2.拷贝显示文件到要测试的网站里
sudo cp -r examples xhprof_html xhprof_lib /home/www/phpsite/pt/
3. 编译前预处理。
sudo cd xhprof-0.9.4/extension/
sudo /usr/local/php/bin/phpize
4. 编译三部曲
sudo ./configure --with-php-config=/usr/local/php/bin/phpsize
sudo make
sudo make install
5. 安装完提示
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
6.增加PHP配置,修改/usr/local/php/etc/php.ini, 在文件底部追加
sudo vi /usr/local/php/etc/php.ini
[xhprof]
extension=xhprof.so
xhprof.output_dir=/usr/local/php/logs/xhprof
7. 重启php-fpm
sudo killall php-fpm
sudo /usr/local/php/sbin/php-fpm &
8. 验证是否安装成功
php -m
9. graphviz 安装 (安装Graphviz的目的是为了xhprof图形化web工具查看profiling log文件。)
sudo wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.28.0.tar.gz
sudo tar -zxvf graphviz-2.28.0.tar.gz
sudo cd graphviz-2.28.0
sudo ./configure
sudo make
sudo make install
安装完成后,会生成/usr/local/bin/dot文件,确保路径在PATH环境变量里,以便XHProf能找到它,graphviz处于/usr/local/lib/graphviz。
<span style="font-size:18px;">sudo vi ~/.bash_profile</span>
<span style="font-size:18px;">sudo source ~/.bash_profile</span>
<span style="font-size:18px;">echo $PATH</span>
看看输出里面是不是已经有了/usr/local/bin/dot这个路径了。
10. 运行http://10.5.100.243:8091/examples/sample.php
http://10.5.100.243:8091/xhprof_html/index.php?run=52c6416d09cf5&source=xhprof_foo
11. http://10.5.100.243:8091/xhprof_html/callgraph.php?run=52c6416d09cf5&source=xhprof_foo
报错了 Notice: Undefined variable: pipes in /home/www/phpsite/pt/xhprof_lib/utils/callgraph_utils.php on line 112 Warning:proc_open() has been disabled for security reasons in /home/www/phpsite/pt/xhprof_lib/utils/callgraph_utils.php on line 112 failed to execute cmd " dot -Tpng"
打开/usr/local/php/etc/php.ini, 找到disable_functions
,把proc_open()从disable_functions列表中去掉。
先执行
killall php-fpm
再执行(usr/local/php是php的安装目录)
/usr/local/php/sbin/php-fpm &
参考: https://drupal.org/node/366299
12. 图像出来了
13. 如何看懂XHProf分析报告
如图1所示,XHProf报告中有许多列,它们代表的含义见下表:
列名 |
描述 |
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峰值百分比。 |