PHP性能分析xhprof使用

来源:互联网 发布:php header cookie 编辑:程序博客网 时间:2024/05/22 16:36

本文转自:http://blog.csdn.net/liangjianquan10/article/details/41447581,加上自己的一点修改以完善流程

XHProf是facebook开发的一个PHP扩展,用于采集php程序中每个函数的性能开销。采集的数据包括:内存消耗、CPU计算时间、函数执行时长等等。

      XHProf同时提供了一套查看性能数据的web界面,可查看php程序执行过程中函数的调用情况和性能开销,也可对多个结果进行差异对比或者汇总。

1. 安装XHProf扩展

     XHProf的安装步骤和常规php扩展的安装一样:

(1). 下载XHProf,目前最近版为xhprof-0.9.4.tgz(http://pecl.php.net/package/xhprof)

(2). 解压

      tar -zxvf xhprof-0.9.4.tgz

(3). 进入xhprof-0.9.4/extension执行phpize

      cd xhprof-0.9.4/extension

      /usr/local/php/bin/phpize

(4). 执行configure,指定php-config路径

      ./configure --with-php-config=/usr/local/php/bin/php-config

(5). 执行make & make install

      make install

(6). 修改php.ini,引入xhprof.so并指定XHProf的性能数据存放目录

      extension=xhprof.so;

      xhprof.output_dir=/usr/local/avery/xhprof_data;

2. 安装Graphviz

      Graphviz是一个基于命令行的绘图工具,XHProf中使用Graphviz的命令来绘制函数调用图。
      Graphviz的安装过程和其他Linux软件安装无异,同样是configure、make、make install三步骤,这里不再赘述。需要注意的是,安装成功后需要将graphviz/bin/dot命令的路径加入到环境变量,因为xhprof生成函数调用图时会直接执行dot命令来生成图片。

      至此,XHProf扩展已经安装好了,我们可以通过XHProf提供的函数进行性能数据采集。但采集完成后,我们需要将数据存储并通过可视化界面展示出来,XHProf提供了相关的类库和web页面,分别位于xhprof-0.9.4/xhprof_lib和xhprof-0.9.4/xhprof_html,我们需要将这两个目录引入项目。

如果PHP7安装失败可按照如下解决方法:

https://github.com/Yaoguais/phpng-xhprof
git clone git@github.com:Yaoguais/phpng-xhprof.git ./xhprofcd xhprof/path/to/php7/bin/phpize./configure --with-php-config=/path/to/php7/bin/php-configmake clean && make && make test && sudo make install

三、相关函数

      详见http://www.php.net/manual/zh/ref.xhprof.php

四、名词解释

1. xhprof_disable返回的数组中:

ct 表示 调用的次数
wt 表示 函数方法执行的时间耗时。相当于,在调用前记录一个时间,函数方法调用完毕后,计算时间差,单位微秒
cpu 表示 函数方法执行消耗的cpu时间。和wt的差别在于,当进程让出cpu使用权后,将不再计算cpu时间。通过调用系统调用getrusage获取进程的占用cpu数据,单位微秒
mu 表示 函数方法所使用的内存。相当于,在调用前记录一个内存占用,函数方法调用完毕后,计算内存差。调用的是zend_memory_usage获取内存占用情况,单位字节
pmu 表示 函数方法所使用的内存峰值。调用的是zend_memory_peak_usage获取内存情况,单位字节

输出内容中good==>good@1 是什么意思
==>表示一个调用关系。由于带@,说明是一个递归调用。@后面的数字是递归调用的深度。

如何设置xhprof_enable的参数,减少性能消耗
xhprof_enable提供了三个常量,用于设置你是否需要统计PHP内置函数,都统计那些指标。
三个常量如下:

XHPROF_FLAGS_NO_BUILTINS
设置这个常量后,将不统计PHP内置函数。毕竟PHP的内置函数性能一般都不错。没必要再消耗性能去统计。所以,建议设置。

XHPROF_FLAGS_CPU
设置这个常量后,会统计进程占用CPU时间。由于CPU时间是通过调用系统调用getrusage获取,导致性能比较差。开启这个选项后,大概性能下降一半。因此,如果对cpu耗时不是特别敏感的情况下,建议不要启用这个选项。

XHPROF_FLAGS_MEMORY
设置这个常量后,将会统计内存占用情况。由于获取内存情况,使用的是zend_memory_usage和zend_memory_peak_usage,并不是系统调用。因此,对性能影响不大。如果需要对内存使用情况进行分析的情况下,可以开启。

PS:在我虚拟机PHP7环境中开启XHPROF_FLAGS_CPU和XHPROF_FLAGS_MEMORY会报错。

2. 数据查看页面中:

Calls:函数调用次数

Incl. Wall Time:包括子函数的函数执行时间。

Excl. Wall Time:不包括子函数的函数执行时间。

Incl. CPU:包括子函数的cpu计算时间。

Excl. CPU:不包括子函数的cpu计算时间。

Incl.MemUse:包括子函数的内存使用量。

Excl.MemUse:不包括子函数的内存使用量。

Incl.PeakMemUse:包括子函数的内存使用峰值。

Excl.PeakMemUse:不包括子函数的内存使用峰值。

五、常见问题

多次调用xhprof_enable方法,最后生效的配置是哪个?
当你在一次请求中多次调用xhprof_enable方法,只有第一次调用时进行的设置能生效。在调用xhprof_disable()后,你又可以使用xhprof_enable方法进行设置。


引用:

http://blog.csdn.net/liangjianquan10/article/details/41447581

http://www.imooc.com/article/12329

1 0
原创粉丝点击