【发布时间】:2011-02-24 13:27:57
【问题描述】:
对我来说测试 PHP 代码性能的最佳方法是什么?
【问题讨论】:
-
请指定是否要测试一段 PHP 代码、一段使用数据库的代码或您网站在负载下的整体性能。所有三个用例都有自己的工具,这反映在此处的答案中。
标签: php performance
对我来说测试 PHP 代码性能的最佳方法是什么?
【问题讨论】:
标签: php performance
您可以使用 microtime() 来弄乱代码的执行时间。 这是一个基本的代码sn-p:
$start_timestamp = microtime(true);
...
---your Code---
...
$end_timestamp = microtime(true);
$duration = $end_timestamp - $start_timestamp;
error_log("Execution took ".$duration." milliseconds.");
【讨论】:
true,即microtime(true),所以它返回一个浮点数而不是一个字符串。
您应该考虑使用ab (apache benchmark tool) 运行大量查询并使用xhprof 分析/分析您的代码。在我看来,这些只是基础,但效果很好。
【讨论】:
xDebug 有一个内置的分析器,一旦配置它会转储一些文件,您可以使用 kCacheGrind 或 WinCacheGrind 等程序读取这些文件
这将允许您查看所有函数调用、平均和累积调用时间以及总脚本执行时间。非常有助于发现代码中的瓶颈。
【讨论】:
如果您想测试代码的特定部分,请考虑使用 PHP PEAR 库中的 Benchmark 包。
$timer = new Benchmark_Timer();
$timer->start();
// Code to test here
$timer->stop();
$timer->display();
【讨论】:
xDEBUG(请参阅 Neil Aitken 的回答)对于识别 PHP 代码中的性能不佳问题很有用 - 但它只能在非常受控和限制性的条件下使用 - 尤其是很难看出并发性对性能有什么影响。
虽然正如 Patrick MARIE 所建议的那样,您可以使用 ab - 如果您尝试衡量的事务跨越页面(例如登录到应用程序并创建会话、将随机产品添加到购物篮、重复添加),这不是一种可行的方法随机产品N次...)。
AFAIK 没有基于 PHP 的录制/脚本交互解决方案 - 但有 Perl + WWW:Mechanize + HTTP:recorder。或者,如果您非常富有,您可以购买 HP 的 loadrunner 产品。
但是很难实现真正代表应用程序使用方式的测试 - 并且应用程序的性能(至少与数据相关的部分)会随着时间而变化 - 因此您需要在您的应用程序中构建适当的性能指标代码。
...即便如此,PHP 生成 HTML 页面所花费的时间只是页面在浏览器上呈现所需时间的一小部分。
HTH
C.
【讨论】:
作为旧问题的新视角,请考虑使用NewRelic 等商业工具来协助进行分析。我个人只是使用它们以免费或名义价格获取少量数据样本。不过,我确实充分利用了他们功能齐全的产品试用版。
【讨论】:
您也可以使用APD(高级 PHP 调试器)。
让它工作起来很容易。
有一个很好的教程如何编译 APD 并使用它进行分析:http://martinsikora.com/compiling-apd-for-php-54
【讨论】: