PHP代码性能分析

37
我希望找到一种方法来确定 PHP 中每个函数以及每个文件所需的运行时间。 我有一个旧的遗留 PHP 应用程序,我试图找到其中的“粗糙点”,因此我想客观地定位哪些例程和页面需要加载很长时间。
是否有任何预制工具可以实现这一点,还是我必须使用 microtime 并构建自己的分析框架?

2
可能是PHP脚本性能分析的最简单方法的重复问题。 - user212218
9个回答

43

上周我实际上进行了一些优化工作。 XDebug确实是可行的方法。

只需将其作为扩展启用(由于某种原因,它在我的Windows机器上无法使用ze_extension),并使用xdebug.profiler_enable_trigger = On设置您的php.ini,然后调用带有XDEBUG_PROFILE = 1的常规网址作为get或post变量以对该请求进行分析。没有比这更容易的了!

此外,我真的很推荐webgrind,这是一个基于Web的(PHP)Google Summer Of Code项目,可以读取和解析您的调试输出文件!


在Windows机器上,Webgrind的替代方案是Wincachegrind(一款桌面应用程序)。 - Halil Özgür
它对我有效,但我还必须根据官方XDebug分析器文档设置xdebug.mode = profilexdebug.output_dir - Melebius

8

这里有一个不错的技巧。

当您使用XDebug来分析您的PHP代码时,可以设置profiler_trigger,并使用书签工具将其触发XDebug分析器 ;)

javascript:if(document.URL.indexOf('XDEBUG_PROFILE')<1){var%20sep=document.URL.indexOf('?');sep%20=%20(sep<1)?'?':'&';window.location.href=document.URL+sep+'XDEBUG_PROFILE';}

6

看一下xdebug,它可以进行深度分析。这里有一个解释关于如何使用xdebug。

Xdebug的分析器是一个强大的工具,它可以让你分析你的PHP代码,并确定瓶颈或通常看到哪些部分的代码很慢并且需要加速。 Xdebug 2中的分析器将分析信息输出为cachegrind兼容文件的形式。

感谢SchizoDuckie 提到Webgrind。这是我第一次听说。非常有用(+1)。

否则,您可以在Linux上使用kcachegrind或其较小的衍生版wincachegrind。这两个应用程序都可以读取xdebug的分析器输出文件,并为您汇总它们以供查看。

3

我曾看过一段关于Zend Core的屏幕录像。看起来很不错,但实际上需要花钱购买,不知道这是否会成为问题。


3

XDebug很好用,但在我看来使用和设置都不是那么容易。

Zend Studio内置的分析器非常易于使用。您只需在浏览器工具栏上点击一个按钮,然后 BAM ,您就可以获得代码分析结果。虽然它可能没有CacheGrind转储文件那么深入,但对我来说总是足够好的。

您确实需要设置Zend Platform,但这很简单,并且开发使用是免费的 - 但您仍然需要支付Zend Studio许可证费用。


3
三年半后,我现在不同意自己的看法。Facebook已经开源了一个名为XHProf的性能分析工具,非常好用、轻量,并且设置和运行都相当简单。 - Marc Gear

2
如果您安装了xdebug扩展,您可以设置它来导出运行配置文件,然后在Windows上使用WinCacheGrind进行读取。我无法回忆起在Linux上读取这些文件的应用程序的名称。

2

xdebug的性能分析功能非常好。如果您将其保存为valgrind格式的输出,那么您可以使用类似于KCachegrind或Wincachegrind的工具来查看调用图,如果您是视觉类型的人,可以更轻松地了解发生了什么。


2
除了拥有强大的实时调试功能外,NuSphere(www.nusphere.com)的PhpED还具有内置的分析器,可以在IDE内部一键运行。

0
最简单的解决方案是使用Zend Profiler,您无需使用Zend Platform即可使用它,您可以直接从浏览器运行它,它非常准确,并具有您所需的大多数功能,而且它已经集成在Zend Studio中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接