xhprof 是一款Facebook工程师开发和维护的一款PHP性能分析、调试工具,相较于xdebug要更轻量,更节省资源,强烈推荐大家使用。
1、安装流程
可以使用pecl安装、源码编译,如果网络状况支持pecl安装就用pecl安装吧,这是最简便的安装方法。
(1) 通过pecl安装
pecl install xhprof
结果:
[root@iZ2890x6zisZ ~]# pecl install xhprof
Failed to download pecl/xhprof within preferred state "stable", latest release is version 0.9.4, stability "beta", use "channel://pecl.php.net/xhprof-0.9.4" to install
install failed
[root@iZ2890x6zisZ ~]#
由于xhprof没有稳定版,需要使用“pecl install channel://pecl.php.net/xhprof-0.9.4”安装。
pecl install channel://pecl.php.net/xhprof-0.9.4
安装成功,将以下内容追加到php.ini,重启Apache或者php-fpm(强调是php-fpm而不是nginx)。
extension=xhprof.so
xhprof.output_dir="/tmp/xhprof"
(2) 源码编译安装
wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar -zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4
cd extension
phpize
./configure --enable-xhprof
make
make test
sudo make install
安装成功后也需要追加以下内容到php.ini中,重启Apache或者php-fpm(强调是php-fpm而不是nginx)。
extension=xhprof.so
xhprof.output_dir="/tmp/xhprof"
2.使用过程
如果通过pecl安装的话,还得下载http://pecl.php.net/get/xhprof-0.9.4.tgz,解压后将xhprof_lib和xhprof_html放到项目目录下。
建立个test.php,内容如下
<?php
// cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY
// 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
//要测试的php代码
$data = xhprof_disable(); //返回运行数据
// xhprof_lib在下载的包里存在这个目录,记得将目录包含到运行的php代码中
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";
$objXhprofRun = new XHProfRuns_Default();
// 第一个参数j是xhprof_disable()函数返回的运行信息
// 第二个参数是自定义的命名空间字符串(任意字符串),
// 返回运行ID,用这个ID查看相关的运行结果
$run_id = $objXhprofRun->save_run($data, "xhprof");
var_dump($run_id);
然后访问test.php后复制run_id然后
访问 xxx/xhprof_html/index.php?run=$run_id&source=xhprof 就可经看到你的php代码运行的相关情况
3.进一步了解和使用
通过在需要调试的代码间使用xhprof_enable和xhprof_disable就能获取性能分析的数据。但不够方便也不够灵活。随后看到有博主通过建立head.php和foot.php,然后在相应位置include进去;内容如下:
//head.php
<?php
if(extension_loaded('xhprof')){
//载入下载的XHPROF包中的2个文件夹
include_once 'xhprof_lib/utils/xhprof_lib.php';
include_once 'xhprof_lib/utils/xhprof_runs.php';
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//foot.php
<?php
if(extension_loaded('xhprof')){
$ns = 'myXhprof';
//关闭profiler
$xhprofData = xhprof_disable();
//实例化类
$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData, $ns);
//前端展示库的URL
$url = 'http://localhost/xhprof_html/index.php';
$url .= '?run=%s&source=%s';
//变量替换
$url = sprintf($url, $runId, $ns);
//输入URL
echo '<a href="'.$url.'" target="_blank">查看结果</a>';
}
//index.php
<?php
include_once 'head.php';
echo 'Hello World';
include_once 'foot.php';
auto_prepend_file = /var/www/head.php auto_append_file = /var/www/foot.php或者在.htaccess中添加以下配置:
php_value auto_prepend_file = /var/www/head.php php_value auto_append_file = /var/www/foot.php
centos :
yum install graphviz
unbutu:
apt-get install graphviz
在yii、thinkphp中使用xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);报502错误。应该修改为以下配置。
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
名词解释:
Function Name 函数名
Calls 调用次数
Calls% 调用百分比
Incl. Wall Time (microsec) 调用的包括子函数所有花费时间 以微秒算(一百万分之一秒)
IWall% 调用的包括子函数所有花费时间的百分比
Excl. Wall Time (microsec) 函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒)
EWall% 函数执行本身花费的时间的百分比,不包括子树执行时间
Incl. CPU(microsecs) 调用的包括子函数所有花费的cpu时间。减Incl. Wall Time即为等待cpu的时间
减Excl. Wall Time即为等待cpu的时间
ICpu% Incl. CPU(microsecs)的百分比
Excl. CPU(microsec) 函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算(一百万分之一秒)。
ECPU% Excl. CPU(microsec)的百分比
Incl.MemUse(bytes) 包括子函数执行使用的内存。
IMemUse% Incl.MemUse(bytes)的百分比
Excl.MemUse(bytes) 函数执行本身内存,以字节算
EMemUse% Excl.MemUse(bytes)的百分比
Incl.PeakMemUse(bytes) Incl.MemUse的峰值
IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比
Excl.PeakMemUse(bytes) Excl.MemUse的峰值
EPeakMemUse% EMemUse% 峰值百分比
中文官网:http://www.xhprof.com/index.php