使 PHP 性能分析可预测

Posted

技术标签:

【中文标题】使 PHP 性能分析可预测【英文标题】:Making PHP performance profiling predictable 【发布时间】:2010-09-21 00:06:37 【问题描述】:

我正在使用 xdebug 和 php 来进行一些性能分析。但是当我多次运行同一个脚本时,我经常会得到非常不同的时间。所以很难知道对结果有多大信心。

很明显,机器上发生了很多事情会影响 PHP 的性能。但是我能做些什么来减少变量的数量,让多个测试更加一致吗?

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

【问题讨论】:

@JW:只是好奇,这个性能测试中是否缓存了什么?这就是我的想法:) 嗯,很难说。我没有像 APC 这样的 PHP 缓存。而且我只是分析 PHP 代码,所以我不担心浏览器缓存任何东西。但是谁知道操作系统在内存中缓存了什么。 【参考方案1】:
    尽可能减少盒子上无关服务的数量。 减少 Apache 进程的数量。 通过多次加载脚本来启动各种缓存。可能使用 Apache 的 absiege 之类的基准测试工具,以确保所有 Apache 子节点都受到影响。 使用curlwget 从命令行配置您的脚本,以便Apache 只提供一种资源:脚本本身。

通过省略其中一些步骤来获得更多“真实世界”数字可能存在争议。我期待这个问题可能收到的其他答案。

【讨论】:

【参考方案2】:

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

为了衡量它所花费的时间,您应该期待可变性,因为它取决于机器中发生的其他事情。这很正常。

为了发现问题,您需要知道的是各种活动所用时间的百分比。百分比不会因其他因素而发生太大变化,而且百分比的确切值也无关紧要。

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

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

【讨论】:

【参考方案3】:
    正如其他人所说,将正在运行的服务和程序减少到最低限度 连续多次运行测试并计算异常值的平均值 确保禁用任何类型的缓存(除非您特别想使用缓存对其进行测试) 如果结果仍然存在很大差异,则问题很可能出在您的分析代码中。它可能有一些赛车条件或取决于网络连接。如果您提供代码,您将获得更多详细信息 您也可能在某些运行中遇到瓶颈。如果您仔细分析脚本的不同部分,您可能会发现它。

【讨论】:

以上是关于使 PHP 性能分析可预测的主要内容,如果未能解决你的问题,请参考以下文章

软件构造——LL语法分析

如何解读logistic回归分析

报表模板 — 在项目管理中应用数据报表分析

寻找有缘人:你能说出下面图案所包含的随机数据统计分析预测原理吗?请以文字形式阐述!

灰色预测模型

数据分析:基于随机森林(RFC)对酒店预订分析预测