新浪的 SAE 支持 XHProf,所以自己研究了一下,其实它就是一个分层 PHP 性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU 时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销。原始数据收集部分是用纯 C 实现的,是一个名叫**xhprof**的 Zend 扩展 。XHProf 有一个简单的 HTML 的用户界面( PHP 写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图,是 Facebook 搞的。

这里我用 ubuntu 安装测试的,其他 Linux 版本类似,不影响。试用感觉还不错,这里记录一下安装配置过程。具体文档请查看这里 http://www.162cm.com/p/xhprofdoc.html#installation

1.下载安装 XHProf

sudo apt-get install php5-dev
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar zxf xhprof-0.9.2.tgz
cd xhprof-0.9.2
cp -r xhprof_html xhprof_lib /path/to/your_web_root
cd extension
phpize
./configure
make
make install

创建 xhprof.ini

touch /etc/php5/fpm/conf.d/xhprof.ini

2.配置 php.ini

[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=/tmp/xhprof

创建 output_dir:

mkdir /tmp/xhprof && chmod 777 /tmp/xhprof

重启 apache 服务让修改生效,现在就可以使用 XHProf 了

3.为了显示效果更炫,继续安装 Graphviz。

wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
tar zxf graphviz-2.24.0.tar.gz
cd graphviz-2.24.0
./configure
make
make install

4.写一个测试实例

<?php
function a(){
 echo 'a';
}
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);   //XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
// run program
a();
// stop profiler
$xhprof_data = xhprof_disable();   //返回运行数据
// 下面是保存运行数据
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "sourcejoy");   //第一个参数是 xhprof_disable()函数返回的运行信息,第二个参数是自定义的命名空间字符串(任意字符串),返回运行ID。

接下来在要统计的 php 应用中加入以下语句:

xhprof_enable(); //统计的代码部分之前加,如果要显示CPU占用 可以加入XHPROF_FLAGS_CPU参数,内存是XHPROF_FLAGS_MEMORY,如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

xhprof_disable();//统计的代码部分之后加

这样 xhprof 就可以统计当前页面的函数性能情况了。xhprof 会把每次访问加入统计代码的页面的性能统计结果在指定目录下生成一个文件,文件名命名方式为:本次访问的系统 ID.命名空间,每次刷新页面都会重新生成一个文件,每个的系统 ID 都不同。

然后通过 xhprof_html 目录的 http 访问 url 来查看结果。如:http://app/xhprof_html/?run=运行id&source=命名空间(其中运行ID和命名空间可以根据xhprof生成的文件名来确定)

名词解释:

  • Inclusive Time :包括子函数所有执行时间。

  • Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。

  • Wall Time:花去了的时间或挂钟时间。

  • CPU Time:用户耗的时间+内核耗的时间

  • Inclusive CPU:包括子函数一起所占用的 CPU

  • Exclusive CPU:函数自身所占用的 CPU

转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

谢谢打赏

本文链接地址: XHProf-PHP 性能分析工具安装使用笔记

知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可