facebook轻量级的php性能分析工具xhprof的安装与使用

Facebook的真实工作环境或许没有大家想象之中的那样完美,xhprof —— facebook 开发的一个测试php性能的扩展。跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。

下载源码包的网址:

http://pecl.php.net/package/xhprof

    一:安装

         编译安装:

# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
# tar zxf xhprof-0.9.2.tgz
# cd xhprof-0.9.2/extension/
# sudo phpize
# sudo ./configure --with-php-config=/usr/local/php/bin/php-configsudo makesudo make install

      配置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=/tmp/xhprof

重启nginx以及php后就可以看到xhprof安装成功~

   二:使用

    将如下代码添加到要测试的php代码中:

 <?pho 
 // cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY 
 // 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY 
  
 //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); // 允许CPU和内存输出
 xhprof_enable(); 
 
 // 要测试的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);
echo "http://xxx.com/xhprof_html/index.php?run=".$run_id."&source=xhprof";

  查看运行结果:

将xhprof_lib&&xhprof_html相关目录copy到可以访问到的地址
访问 xxx/xhprof_html/index.php?run=$run_id&source=bluefrog 就可经看到你的php代码运行的相关情况

下面是一些参数说明
Inclusive Time                 包括子函数所有执行时间。
Exclusive Time/Self Time  函数执行本身花费的时间,不包括子树执行时间。
Wall Time                        花去了的时间或挂钟时间。
CPU Time                        用户耗的时间+内核耗的时间
Inclusive CPU                  包括子函数一起所占用的CPU
Exclusive CPU                  函数自身所占用的CPU

目前显示的是表格形式的显示,点击页面上的[View Full Callgraph],就能看到精美的图片显示了。看看下面的screenshot. 

facebook轻量级的php性能分析工具xhprof的安装与使用_第1张图片

facebook轻量级的php性能分析工具xhprof的安装与使用_第2张图片


  结果分析:

主要指标: 
Inclusive Time (或子树时间):包括子函数所有执行时间。 
Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。 
Wall时间:花去了的时间或挂钟时间。 
CPU时间:用户耗的时间+内核耗的时间 

# 如果xhprof_enable函数写作:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY)可以输出更多指标。 
Function Name 函数名 
Calls 调用次数 
Calls% 调用百分比 

# 消耗时间 
Incl. Wall Time (microsec) 调用的包括子函数所有花费时间 以微秒算(一百万分之一秒) 
IWall% 调用的包括子函数所有花费时间的百分比 
Excl. Wall Time (microsec) 函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒) 
EWall% 函数执行本身花费的时间的百分比,不包括子树执行时间 

# 消耗CPU 
Incl. CPU(microsecs) 调用的包括子函数所有花费的cpu时间。减Incl. 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% 峰值百分比


你可能感兴趣的:(facebook轻量级的php性能分析工具xhprof的安装与使用)