xhprof–facebook的PHP性能分析工具 安装与使用 记录

之前看imooc慕课性能优化之PHP优化的视频时 作者提到的一个php扩展xhprof ,可以用来分析php的性能问题,然后就可以根据分析的数据,对代码进行优化,最近试了试,把这些尝试记录下来。环境是linux的centos6.5

1.安装xhprof扩展 和其他php扩展安装方法差不多.搜索xhprof 可以看到 http://pecl.php.net 官网 进去找到下载链接http://pecl.php.net/get/xhprof-0.9.4.tgz 先进入自己放安装包的目录

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

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=
xhprof.output_dir=/mnt/hgfs/www/xhprof/xhprof_runs    //xhprof运行的时候产生的数据文件路径 文件夹要先 建立好

3.把源码里的xhprof_html xhprof_lib两个文件夹拷贝到/mnt/hgfs/www/xhprof/ 通过 xhprof_html可以看到分析的数据
我在apache里给xhprof_html配置一个域名www.xhprof.net 方便访问 ,记得重启apache

4.把代码加入到要测试的php代码中

// cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY
// 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY  也可以不填
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

//我的php代码

$xhprof_data = xhprof_disable();
//得到统计数据之后,以下的工作就是为页面显示做准备。
$xhprof_root = "/mnt/hgfs/www/xhprof";//我的xhprof的路径

include_once $xhprof_root."/xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHprofRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "zhangxingju");//第二个参数在接下来的地方作为命名空间一样的概念来使用
var_dump($run_id); //需要看id的话就打印下,我不习惯打印,看数据的时候看时间来区分哪个是我要的数据

然后查看页面,运行以上代码。生成了相应的文件

访问之前配置的域名www.xhprof.net来看这些数据

点其中一个 就可以看到相应的数据了

funciton name : 函数名
calls: 调用次数
Incl. Wall Time (microsec): 函数运行时间(包括子函数)
IWall%:函数运行时间(包括子函数)占比
Excl. Wall Time(microsec):函数运行时间(不包括子函数)
EWall%:函数运行时间(不包括子函数)

页面中间有个 View Full Callgraph 可以以关系图的方式查看,但是点击报错 failed to execute cmd: ” dot -Tpng”. stderr: `sh: dot: command not found ‘
需要安装graphviz工具
使用yum安装

yum install graphviz

可以看到这样的图,用红色 黄色 线条粗细 展示了每个函数耗时,调用次数等,更直观了。

大概的使用就是这样了,剩下就是在具体代码中查看性能,找到性能不好的函数进行优化。有些文章中提到,把上述代码弄成php的自动加载,试了下,那样打开页面,所有的地方都监测,产生一些不想要的数据,还是喜欢在需要用的地方复制这段代码,可能不太优雅,拭具体情况来用吧。有些提到更漂亮的数据展示xhgui,没有尝试,以后看是否用用xhgui