使PHP性能分析可预测

时间:2010-09-21 00:06:37

标签: php profiling xdebug

我正在使用xdebug和PHP进行一些性能分析。但是,当我不止一次运行相同的脚本时,我经常会遇到非常不同的时间。因此,很难知道将多少信心投入到结果中。

显然,在可能影响PHP性能的机器上发生了很多事情。但是我有什么办法可以减少变量的数量,所以多个测试更一致吗?

我在Apache下运行PHP,在Mac OS X上运行。

3 个答案:

答案 0 :(得分:4)

  1. 尽可能减少盒子上不相关服务的数量。
  2. 减少Apache进程的数量。
  3. 通过加载脚本几次来填充各种缓存。可能使用像Apache的absiege这样的基准测试工具来确保所有Apache孩子都被击中。
  4. 使用curlwget从命令行配置脚本,以便Apache只提供一个资源:脚本本身。
  5. 通过省略其中一些步骤,可能会有争论获得更多“真实世界”的数字。我期待着这个问题可能得到的其他答案。

答案 1 :(得分:3)

有两个不同的任务,衡量绩效和发现问题。

为了测量所需的时间,您应该预期可变性,因为它取决于机器中还有什么。这很正常。

要查找问题,您需要了解的是各种活动所用时间的百分比。百分比不会随着其他因素的变化而变化太大,百分比的确切值无论如何都无关紧要。

重要的是,您发现活动负责健康的百分比,您可以修复,然后您修复它们。当你这样做时,你可以节省时间达到这个百分比,但这个发现就是你需要做的。测量是次要的。

补充:你可能想问“你不必为了找到而进行测量吗?” 考虑一个例子。假设您在打开调试的情况下运行程序,然后随机暂停它,并在关闭日志文件的过程中看到它。你继续它,然后再次暂停它,看到同样的事情。那么粗略的“测量”说它花了100%的时间来做这件事。当然,花在这上面的时间并不是100%,但不管它是什么,它都很大,你已经找到了它。那么也许你不必经常打开/关闭文件,或者其他东西。通常,需要更多样本,但不是太多。

答案 2 :(得分:1)

  1. 正如其他人所说,将运行的服务和程序减少到最低程度
  2. 连续多次运行测试并平均以计算异常值
  3. 确保禁用任何排序的缓存(除非您特别希望使用缓存进行测试)
  4. 如果结果差异很大,则问题很可能出在您的性能分析代码中。它可能有一些竞争条件或取决于网络连接。如果您提供代码,您将获得更多详细信息
  5. 你也可能在一些运行中遇到一些瓶颈。如果您仔细剖析脚本的不同部分,您可能会抓住它。