当前位置: 首页 > 工具软件 > xhprof > 使用案例 >

xhprof 安装与使用

贾俊喆
2023-12-01

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';


技巧:如果有大量的文件,这样处理还不够方便,我们可以在php.ini中添加以下配置:

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



Tips:点击[View Full Callgraph]查看图片的时候报错:failed to execute cmd:" dot -Tpng". stderr:`sh: dot:command not found`。
原因:原因:未安装图形化工具Graphviz

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

 类似资料: