xhprof 安装与使用
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
原因:原因:未安装图形化工具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