当前位置: 首页 > 架构相关 > xhprof安装、搭建详细笔记

xhprof安装、搭建详细笔记

写在前面

xhprof是一个函数级别的 分层PHP性能分析工具,xhprof能统计每个函数的调用次数,cpu使用时间内存占用等多项指标,它将函数的开销,细分为调用者和被调用者的开销。展示页面基于浏览器非常人性化,分为两个性能报告页面,一个是报表格式的一个是直观化的图表格式。根据这些分析数据,可以轻松的看到程序的开销情况,找出低效率的程序进行优化。我之前搭建过一次xhprof,今天在自己服务器上搭,用来简单监控自己站点的访问情况,结果还出了些问题,不过都已经解决了。下面就是我安装的过程。下一篇还要写关于如何使用的方法。

第一步,编译安装php的xhprof扩展:

从官网下载的包make && make install 的时候会出现错误:(wget http://pecl.php.net/get/xhprof-0.9.2.tgz)是错误的 :[xhprof.lo] Error 1

所以要从github下载安装:

wget https://github.com/facebook/xhprof/archive/master.zip
unzip master.zip
cd xhprof-master/extension/
#查到自己的phpize
/usr/local/php/bin/phpize
#根据自己的php-config位置
./configure --with-php-config=/usr/local/php/bin/php-config 
make
make install

第二步,配置php的配置文件php.ini:

查找extension_dir在下面添加(注意路径xhprof要具有读写权利):

[xhprof]
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

第三步,重启php-fpm

重启方式查看:重启php-fpm的几种方法(安装php扩展后需要重启)最后查看phpinfo()可以看到:

说明添加成功。

第四步,安装作图工具graphviz:

最好是安装到专门的监控服务器上,而且xhprof也仅搭建到监控服务器即可,如果仅做实验安装到哪就无所谓了。

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

安装完成后,会生成/usr/local/bin/dot文件,你应该确保路径在PATH环境变量里,以便XHProf能找到它。

graphviz图片没有出现可能的几个原因:

原因①:安装完成后,会生成/usr/local/bin/dot文件,确保路径在PATH环境变量里,以便XHProf能找到它,graphviz处于/usr/local/lib/graphviz。

原因②:报错了 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列表中去掉。去掉以后还是要重新启动php-fpm

原因③:报错:failed to execute cmd: " dot -Tpng". stderr: `Error: Could not find/open font。

这里是报错的解释http://stackoverflow.com/questions/4787273/graphviz-cant-find-any-fonts

按这个解释寻找源代码,代码中出现的cmd命令,在xhpro_lib/utils/callgraph_utils.php中第168行,就是生成命令的代码,我在命令中加上了filepath和filename结果还是出错,于是再找出错原因,找到出错处的源码,将exit直接注释了,运行正常,图片也正常。注释的内容就是xhpro_lib/utils/callgraph_utils.php文件中的xhprof_generate_image_by_dot方法的第122、123行:

if (!empty($err)) {
    print "failed to execute cmd: \"$cmd\". stderr: `$err'\n";
    exit;
}

第五步,拷贝xhprof源文件进行测试:

拷贝解压目录xhprof-0.9.2 下的 xhprof_html和xhprof_lib到nginx的根目录下面(xhprof_html和xhprof_lib这两个目录要平行,而且要与作图软件graphviz在一台服务器上) ,并在根目录建立一个测试文件test.php。test.php内容如下:

//just for test
include_once "xhprof_lib/utils/xhprof_lib.php"; //应用程序所在的目录,生存统计数据用到的类库
include_once "xhprof_lib/utils/xhprof_runs.php"; 
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
function test() {
    echo '测试方法' . '<br>';
}
test();
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
echo "性能报告地址====" . "<a href=http://eagleeye.zhbor.com/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo>点击查看报告</a>";

在浏览器中输入test.php的地址,点击报告地址,可以查看函数级别的请求次数和各种指标等。

结果如下:

点击查看报告后,会出现性能分析的详情页面,如下。具体参数介绍在文章最下面xhprof参数说明列表。

点击viewFull callgraph即可查看性能分析图片

至此,xhprof安装完成,作图工具graphviz安装完成。实验成果。接下来就是如何在生成项目中运用,下一篇文章我会写下详细的使用方法,嗯,非常详细。

最后:

XHProf报告中有许多列,它们代表的含义见下表:

(图表来源http://blog.csdn.net/ruanchao/article/details/17784801)

列名

描述

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峰值百分比。


转载时请以 超链接的形式 注明:转自Ferman

                  

About me