PHP性能检测之xhprof的安装和应用

1.前言

在前面的文章(PHP之程序性能优化思路)中,我们简单的介绍了一款PHP性能分析工具XHPorf,但是没有深入讲解如何安装到wamp环境下,下面我们对其安装和测试详细了解

2.下载xhprof客户端包

2.1windows下安装扩展

PHP性能分析工具XHPorf下载链接:https://pan.baidu.com/s/1_uYjtUAasxtXOCx6r4o9lA

提取码:a2gb

下载后,将其放到WWW根目录

PHP性能检测之xhprof的安装和应用

首先将文件里的下面这两个包放到php的ext文件下

PHP性能检测之xhprof的安装和应用

PHP性能检测之xhprof的安装和应用

然后在php的php.ini文件中加入这段

PHP性能检测之xhprof的安装和应用

可复制代码:

[xhprof]
extension=php_xhprof.dll
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
xhprof.output_dir="F:\wamp\www\xhprof-0.9.3\xprof_log"

注意xhprof.output_dir的路径必须指向下图文件夹的xprof_log

PHP性能检测之xhprof的安装和应用

最后查看phpinfo.php,当你能够查看到下图所示,就表示php扩展正常开启

PHP性能检测之xhprof的安装和应用

2.2linux下安装扩展

安装命令:

wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2/extension/
sudo phpize
./configure --with-php-config=/usr/local/php/bin/php-config
sudo make
sudo make install

把生成的 xhprof.so 放到扩展的目录下,并配置记录存放的路径

3.开启分析与存储结果

可以前往文件的案例查看如何使用(路径如下图所示)

PHP性能检测之xhprof的安装和应用

该文件内重要的两个函数是

PHP性能检测之xhprof的安装和应用

4.查看分析结果

4.1查看测试列表

在xhprof-0.9.3/xhprof_html/里面就保存着我们所需要的测试结果

PHP性能检测之xhprof的安装和应用

点击进去,就能看到性能测试结果

PHP性能检测之xhprof的安装和应用

而点击[View Full Callgraph]就能转换成图形解释(需要安装插件)

4.2安装Graphviz插件

下载地址:http://www.graphviz.org/download/

修改配置文件 config.php如下:

PHP性能检测之xhprof的安装和应用

4.3点击view full callgraph 链接查看

PHP性能检测之xhprof的安装和应用

上图的红色节点是整个php程序执行过程中的瓶颈,黄色路径为整个过程耗时最长的路径

输出结果的含义:

ct 函数调用次数
wt 花费的时间
cpu 花费的 CPU 时间(微秒即百万分之一秒)
mu 使用的内存(bytes)
pmu 使用的内存峰值(bytes)

web 分析结果页面含义

Calls:函数的调用次数
Incl. Wall Time (microsec) :包含内部函数花费的时间,单位微秒
Excl. Wall Time (microsec):不包含内部函数花费的时间,单位微秒
及所占百分比(%)

注:

Incl.:为 Including 包含的简写
Excl.:为 Excluding 不包含的简写
Wall Time:意为挂钟时间即任务花费的时间

main():一个虚构的函数,程序根节点
[email protected]:递归调用 2 次
Incl. CPU (microsecs):包含内部函数 CPU 花费的时间,单位微秒
Excl. CPU (microsec):不包含内部函数 CPU 花费的时间,单位微秒
Incl. MemUse (bytes):包含内部函数所占内存,单位字节
Excl. MemUse (bytes):不包含内部函数所占内存,单位字节
Incl. PeakMemUse (bytes):包含内部函数所占内存峰值,单位字节
Excl. PeakMemUse (bytes):不包含内部函数所占内存峰值,单位字节
及所占百分比(%)

可以认为共三种情况:

  • 1. 包括内部函数
  • 2. 不包括内部函数或者说函数本身
  • 3. 所占总数(时间或内存使用)的百分比

5.异常与解决

报错:Xhprof graphviz Warning: proc_open() [function.proc-open]: CreateProcess failed, error code

解决参考:https://www.cnblogs.com/wuxiang12580/p/10346847.html