php性能分析工具

XDebug:(http://xdebug.org/) 客户端工具(Windows):WinCacheGrind

 

PEAR Benchmark:先安装PEAR,http://pear.php.net/package/Benchmark/download Benchmark工具类包共有三个文件,分别是Timer.php、Iterate.php和Profiler.php

1,Benchmark_Timer类原理与通过microtime函数获取微秒时间再比较前后两个时间值的差相同。

2,Benchmark_Iterate类用于调试函数的平均执行时间。

3,Benchmark_Profiler类用于统计代码和函数的执行时间以及函数的调用次数。

实例:

require_once 'Benchmark/Timer.php';

$timer = new Benchmark_Timer();

$timer->start();

$timer->setMarker("marker 01");

usleep(1);

$timer->setMarker("marker 02");

usleep(2);

$timer->setMarker("marker 03");

usleep(3);

$timer->stop();

$timer->display();

 

xhprof:facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。在数据收集阶段,它记录调用次 数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递 归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。

一、编译安装XHProf

[root@localhost src]# wget http://pecl.php.net/get/xhprof-0.9.2.tgz

[root@localhost src]# tar zxf xhprof-0.9.2.tgz

[root@localhost src]# cd xhprof-0.9.2

[root@localhost xhprof-0.9.2]# cp -r xhprof_html xhprof_lib /var/www/html/

[root@localhost xhprof-0.9.2]# cd extension/

[root@localhost extension]# /usr/local/webserver/php/bin/phpize

[root@localhost extension]# ./configure  –with-php-config=/usr/local/webserver/php/bin/php-config

二、配置 php.ini 文件

vi vi /usr/local/webserver/php/etc/php.ini  修改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>

重启WEB服务器。为了更加清晰显示程序执行、调用结构,安装Graphviz。

三、安装Graphviz:

[root@localhost src]# wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz

[root@localhost src]# tar zxf graphviz-2.24.0.tar.gz

[root@localhost graphviz-2.24.0]# cd graphviz-2.24.0

[root@localhost graphviz-2.24.0]# ./configure

[root@localhost graphviz-2.24.0]# make

[root@localhost graphviz-2.24.0# make install

四、应用XHProf

客户端能很灵活地保存他们从XHProf运行中得到的XHProf原始数据。用户界面层的XHProf提供了一个 iXHProfRuns接口(见xhprof_lib/utils/xhprof_runs.php ),客户端可以利用。这使得客户端能够告诉用户界面层,如何获取XHProf运行后产生的对应数据。

XHProf的UI 库自带的有一个基于文件的iXHProfRUns接口实现,即“ XHProfRuns_Default”(见xhprof_lib/utils/xhprof_runs.php)。这个自带的实现将XHProf运行结 果存在ini配置的xhprof.output_dir参数指定的某个目录下。

一次XHProf运行,必须用一个命名空间和运行编号来唯一确定。

假设使用iXHProfRuns接口的XHProfRuns_Default这个默认实现方式,如:

//xhprofStart.php 文件

<?php

$XHPROF_DEBUG     =   FALSE;

$debugUserIDArray =   array(

123456     =>     1,

456152  =>  1,

);

if (function_exists('xhprof_enable') && !empty($debugUserIDArray[$winduid]))

{

$XHPROF_DEBUG   =   TRUE;

}

if ($XHPROF_DEBUG)

{

include_once “/var/www/html/xhprof_lib/utils/xhprof_lib.php”;

include_once “/var/www/html/xhprof_lib/utils/xhprof_runs.php”;

xhprof_enable(); //start profiling 

}

?>

//xhprofEnd.php 文件

<?php

if (TRUE    ==  $XHPROF_DEBUG)

{

//stop profiler

$xhprof_data    =   xhprof_disable();

$xhprof_runs    =   new XHProfRuns_Default();

$run_id         =   $xhprof_runs->save_run($xhprof_data, “xhprof_foo”);

echo “—————/n”.

“<a href=’/xhprof_html/index.php?run=$run_id&source=xhprof_foo’>xhprof</a>/n”.

“—————/n”;

}

echo ‘<!– xhprof –>’;

?>

 

 

程序中应用:

include /var/www/html/xhprofStart.php

// run program

….

include /var/www/html/xhprofEnd.php

 

将profile开关程序放在你所要进行分析的程序部分,就会将运行结果保存在xhprof.output_dir ini参数指定的特定目录下。文件的名称可能会是23dffaa3a3f66.xhprof_foo类似的文件; 两部分分别是运行编号(23dffaa3a3f6)和命名空间(xhprof_foo)。

 

最后,一些术语解释:

1. Inclusive Time (或子树时间):包括子函数所有执行时间。

2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。

3. Wall时间:花去了的时间或挂钟时间。

4. CPU时间:用户耗的时间+内核耗的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值