您的位置:首页 > 其它

启用Xdebug使用WinCacheGrind分析脚本执行时间

2011-12-29 12:47 495 查看
使用Xdebug调试和优化PHP程序系列教程之WinCacheGrind,教你如何利用Xdebug 配合WinCacheGrind工具来检测PHP代码的效率以及分析PHP代码。
有时候代码没有明显的编写错误,没有显示任何错误信息(如 error、warning、notice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效 率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析, 找到问题所在。

回忆一下,之前我们编辑php.ini文件

加入

[Xdebug]

xdebug.profiler_enable=on

xdebug.trace_output_dir="I:\Projects\xdebug"

xdebug.profiler_output_dir="I:\Projects\xdebug"


这几行,目的就在于把执行情况的分析文件写入到”I:\Projects\xdebug”目录中去 (你可以替换成任何你想设定的目录)。如果你执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如 cachegrind.out.1169585776这种格式命名的文件。这些就是 Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,我们需要用图形化的软件来查看。

安装教程也可以参考这里:http://blog.haohtml.com/index.php/archives/3096

WinCacheGrind 下载

在Windows平台下,可以用 WinCacheGrind(wincachegrind.souceforge.net)这个软件来打开这些文件。可以直观漂亮地显示其中内容:





哇,非常漂亮,我们很直观地看到 index.php中我们调用了一个函数testXdebug(),testXdebug()中又调用了requireFile()函数。这样我们就可以 非常方便地查看整个脚本的程序结构。

另外,我们还可以看到每个函数被调用的次数及执行所花费的时间!这对于测试程序性能非常有用。





好了,这么一个简单的程序不太能 显示出Xdebug+WinCacheGrind的强大,我给出一个稍大点的例子(一个基于Zend Framework的CMS的index.php):





从上图可以看到:整个程序的结构, 每个函数被调用的次数,执行时间都一目了然。





WinCacheGrind 小结

Xdebug提供了各种自带的函数,并对已有的某些PHP函数进行覆写,可以方便地用于调试排错;Xdebug还可以跟 踪程序的运行,通过对日志文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能。

Self是代表此Funcion自己花费的时间,不包含此Function调用的其他Function。

Cum则是此Funcion整体花费的时间,包含此Function调用的其他Function。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: