XHProf——php性能分析工具

XHProf是facebook开发的一个php扩展,用于采集php程序中每个函数的性能开销。采集的数据包括:内存消耗、CPU计算时间、函数执行时长等等。

      XHProf同时提供了一套查看性能数据的web界面,可查看php程序执行过程中函数的调用情况和性能开销,也可对多个结果进行差异对比或者汇总。

1. 安装XHProf扩展

     XHProf的安装步骤和常规php扩展的安装一样:

(1). 下载XHProf,目前最近版为xhprof-0.9.4.tgz(http://pecl.php.net/package/xhprof

(2). 解压

      tar -zxvf xhprof-0.9.4.tgz

(3). 进入xhprof-0.9.4/extension执行phpize

      cd xhprof-0.9.4/extension

      /usr/local/php/bin/phpize

(4). 执行configure,指定php-config路径

      ./configure --with-php-config=/usr/local/php/bin/php-config

(5). 执行make & make install

      make install

(6). 修改php.ini,引入xhprof.so并指定XHProf的性能数据存放目录

      extension=xhprof.so;

      xhprof.output_dir=/usr/local/avery/xhprof_data;

2. 安装Graphviz

      Graphviz是一个基于命令行的绘图工具,XHProf中使用Graphviz的命令来绘制函数调用图。
      Graphviz的安装过程和其他linux软件安装无异,同样是configure、make、make install三步骤,这里不再赘述。需要注意的是,安装成功后需要将graphviz/bin/dot命令的路径加入到环境变量,因为xhprof生成函数调用图时会直接执行dot命令来生成图片。

      至此,XHProf扩展已经安装好了,我们可以通过XHProf提供的函数进行性能数据采集。但采集完成后,我们需要将数据存储并通过可视化界面展示出来,XHProf提供了相关的类库和web页面,分别位于xhprof-0.9.4/xhprof_lib和xhprof-0.9.4/xhprof_html,我们需要将这两个目录引入项目。

三、相关函数

      详见http://www.php.net/manual/zh/ref.xhprof.php

四、使用方法

1. 代码示例

<?php

//启动xhprof性能分析
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

//执行业务代码
function myFunc{
    $length = strlen('hello');
    ( = ; ++;  < 20000){
        $length += ;
    }
    return $length;
}
myFunc();
time();

//业务代码执行完后,停止xhprof性能分析并取得性能数据
$data = xhprof_disable();

//保存性能数据
require 'xhprof/xhprof_lib/utils/xhprof_lib.php';
require 'xhprof/xhprof_lib/utils/xhprof_runs.php';

$xhprof_runs =  XHProfRuns_Default();
$xhprof_runs->save_run($data, "test");

//打印性能数据
var_dump($data);

 2. 页面输出

3. 查看数据

      打开xhprof提供的数据查看页面(xhprof_html/index.php),可以看到所有采集到的性能数据列表:

      点击任一项查看数据,可以查看某次php执行中有多少函数被调用,以及每个函数的调用次数、执行时间、cpu时间以及内存消耗等等:

      点击[View Full Callgraph]可查看函数调用关系图,其中红色节点是整个php程序执行过程中的瓶颈,黄色路径为整个过程耗时最长的路径:

五、名词解释

1. xhprof_disable返回的数组中:

ct:函数被调用的次数。

wt:函数执行时间,单位微秒。

cpu:函数执行的cpu计算时间,单位微秒。

mu:函数执行的内存使用量,单位字节。

pmu:函数执行的内存使用峰值,单位字节。

2. 数据查看页面中:

Calls:函数调用次数

Incl. Wall Time:包括子函数的函数执行时间。

Excl. Wall Time:不包括子函数的函数执行时间。

Incl. CPU:包括子函数的cpu计算时间。

Excl. CPU:不包括子函数的cpu计算时间。

Incl.MemUse:包括子函数的内存使用量。

Excl.MemUse:不包括子函数的内存使用量。

Incl.PeakMemUse:包括子函数的内存使用峰值。

Excl.PeakMemUse:不包括子函数的内存使用峰值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值