现在的位置: 首页 > 综合 > 正文

XHProf安装使用笔记

2013年10月11日 ⁄ 综合 ⁄ 共 2718字 ⁄ 字号 评论关闭

最近公司web服务器老是耗费大量CPU,上面安排我协助搞运维的同事查问题,查了配置,反向代理服务器等外围环境没发现什么大问题,接下来只有查
程序了。但程序怎么查呢?不能一句句读代码吧,那样不可靠也不科学,所以必须要有工具对应用程序进行测试(我们的应用是PHP开发的),百度了一下(原谅
哥的不专业)发现了XHProf这么个东西,是Facebook开源的一个PHP性能检测程序,大致看了一下,很棒,里面有很多直观的数据来说明问题,比
如调用次数、执行时间、内存使用、CPU占用等。有了这个东西,报告就好写啦!这里对这个程序的安装和使用做个简单记录。

 

 

废话不说,直接进主题。

 

编译安装


获取源代码包

root@sourcjoy>
wget http://pecl.php.net/get/xhprof-0.9.2.tgz

解压


root@sourcjoy>
tar zxf xhprof-0.9.2.tgz
root@sourcjoy>
cd xhprof-0.9.2
复制web访问目录到web应用目录

root@sourcjoy>
cp -r xhprof_html xhprof_lib /var/www/html/

  #复制xhprof的展示页面目录和库目录到web目录下,可以为xhprof_html建个虚拟目录来访问,也可以把这两个目录拷贝到应用的根目录下。

root@sourcjoy>
cd extension/
编译插件


root@sourcjoy>
/usr/local/webserver/php/bin/phpize


root@sourcjoy>
./configure --with-php-config=/usr/local/webserver/php/bin/php-config


root@sourcjoy>
make


root@sourcjoy>
make install

 

注意:这里安装的时候可能会出现访问php.ini没权限的问题,请把php.ini的权限改成666:
chmod 666 /usr/local/webserver/php/etc/php.ini

 

配置 php.ini 文件

root@sourcjoy>
vi /usr/local/webserver/php/etc/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=<directory_for_storing_xhprof_runs>

xhprof.output_dir=/var/logs/xhprof

 

重启web服务器

 

为了更加清晰显示程序执行、调用结构,安装Graphviz,如果安装了Graphviz,XHProf会用比较牛的图形方式展现统计数据。
获取源码包

root@sourcjoy>
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz


root@sourcjoy>
tar zxf graphviz-2.24.0.tar.gz
root@sourcjoy>
cd graphviz-2.24.0
编译安装

root@sourcjoy>
./configure
root@sourcjoy>
make
root@sourcjoy>
make install

 

接下来在要统计的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生成的文件名来确定)

 
下面是个例子:

<?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。
?>

 

 
名词:
1. Inclusive Time :
包括子函数所有执行时间。
2. Exclusive Time/Self Time:
函数执行本身花费的时间,不包括子树执行时间。
3. Wall Time:
花去了的时间或挂钟时间。
4. CPU Time:
用户耗的时间+内核耗的时间
5.Inclusive CPU:
包括子函数一起所占用的CPU
6.Exclusive CPU:
函数自身所占用的CPU

最后要说点,这个xhprof程序有点小bug,还不支持php5.2一下的版本,不过这都是小问题,关键是能直观告诉我们程序的性能问题,这个很重要,我们自己开发程序的时候用这个进行性能检查是很不错的。

-END-

抱歉!评论已关闭.