【问题标题】:PHP code's performance testPHP代码的性能测试
【发布时间】:2011-02-24 13:27:57
【问题描述】:

对我来说测试 PHP 代码性能的最佳方法是什么?

【问题讨论】:

  • 请指定是否要测试一段 PHP 代码、一段使用数据库的代码或您网站在负载下的整体性能。所有三个用例都有自己的工具,这反映在此处的答案中。
  • 这里是a great answer

标签: php performance


【解决方案1】:

您可以使用 microtime() 来弄乱代码的执行时间。 这是一个基本的代码sn-p:

$start_timestamp = microtime(true);
...
---your Code---
...
$end_timestamp = microtime(true);
$duration = $end_timestamp - $start_timestamp;
error_log("Execution took ".$duration." milliseconds.");

【讨论】:

  • time() 返回秒,而不是毫秒。我相信您正在寻找类似microtime()
  • 这样做我总是得到负数。我的程序比时间本身快吗?
  • @Raymond:你可能已经证明了粒子比光速移动的可能性 :)
  • 为了使其正常工作(而不是像@Ray那样得到负数)是calling it with the parameter true,即microtime(true),所以它返回一个浮点数而不是一个字符串。
【解决方案2】:

您应该考虑使用ab (apache benchmark tool) 运行大量查询并使用xhprof 分析/分析您的代码。在我看来,这些只是基础,但效果很好。

【讨论】:

    【解决方案3】:

    xDebug 有一个内置的分析器,一旦配置它会转储一些文件,您可以使用 kCacheGrind 或 WinCacheGrind 等程序读取这些文件

    这将允许您查看所有函数调用、平均和累积调用时间以及总脚本执行时间。非常有助于发现代码中的瓶颈。

    【讨论】:

      【解决方案4】:

      如果您想测试代码的特定部分,请考虑使用 PHP PEAR 库中的 Benchmark 包。

      $timer = new Benchmark_Timer();
      $timer->start();
      // Code to test here
      $timer->stop();
      $timer->display();
      

      【讨论】:

        【解决方案5】:

        xDEBUG(请参阅 Neil Aitken 的回答)对于识别 PHP 代码中的性能不佳问题很有用 - 但它只能在非常受控和限制性的条件下使用 - 尤其是很难看出并发性对性能有什么影响。

        虽然正如 Patrick MARIE 所建议的那样,您可以使用 ab - 如果您尝试衡量的事务跨越页面(例如登录到应用程序并创建会话、将随机产品添加到购物篮、重复添加),这不是一种可行的方法随机产品N次...)。

        AFAIK 没有基于 PHP 的录制/脚本交互解决方案 - 但有 Perl + WWW:Mechanize + HTTP:recorder。或者,如果您非常富有,您可以购买 HP 的 loadrunner 产品。

        但是很难实现真正代表应用程序使用方式的测试 - 并且应用程序的性能(至少与数据相关的部分)会随着时间而变化 - 因此您需要在您的应用程序中构建适当的性能指标代码。

        ...即便如此,PHP 生成 HTML 页面所花费的时间只是页面在浏览器上呈现所需时间的一小部分。

        HTH

        C.

        【讨论】:

        • 说得好,很难衡量你的应用在高负载下的表现。您可以使用 Selenium 而不是 Mechanize 来自动化浏览器,但据我所知,它不是为负载测试而设计的。
        • 为什么提到 hp loadrunner 而不是 apache jmeter?
        【解决方案6】:

        作为旧问题的新视角,请考虑使用NewRelic 等商业工具来协助进行分析。我个人只是使​​用它们以免费或名义价格获取少量数据样本。不过,我确实充分利用了他们功能齐全的产品试用版。

        【讨论】:

          【解决方案7】:

          您也可以使用APD(高级 PHP 调试器)。

          让它工作起来很容易。

          有一个很好的教程如何编译 APD 并使用它进行分析:http://martinsikora.com/compiling-apd-for-php-54

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-31
            • 2011-03-18
            • 1970-01-01
            • 2022-01-09
            • 2021-11-15
            相关资源
            最近更新 更多