【问题标题】:How to find why phpunit testsuite is too slow with xdebug?如何找到为什么 phpunit testsuite 使用 xdebug 太慢?
【发布时间】:2012-07-15 05:49:15
【问题描述】:

phpMyAdmin,我们经历了一段时间奇怪的测试套件减速。当启用 xdebug(代码覆盖)并且 ob_start/ob_end_clean 块中存在错误时,我们已经能够将问题追溯到情况。删除其中任何一个都会大大减少测试套件的时间。

                xdebug       enabled      disabled
ob_start failure tests
enabled                       20 min        15 s
disabled                      1 min         15 s

这只是为了说明差异有多大以及我们为什么要摆脱它。

在较小的范围内,这可以通过单个测试 test/classes/PMA_Advisor_test.php 显示:

                xdebug       enabled      disabled
ob_start failure tests
enabled                       7.2 s         0.1 s
disabled                      2.6 s         0.1 s

这里的区别是为一个测试删除单个数据集(如果您要查看源,它是最后一个数据集)并导致测试花费不到一半的时间!更新:在这种特殊情况下,可以使用xdebug.default_enable=0 缓解问题,但这对于整个测试套件并没有太大变化。

乍一看确实是 xdebug 中的一些 bug,但我们一直无法生成比上面更小的测试用例,这听起来很可疑。有什么想法可以进一步调试问题,以及如何找出导致速度变慢的实际原因?

【问题讨论】:

  • 为什么你觉得这太慢了? xdebug 会报告什么错误?也许它只是记录了比没有错误更多的信息。
  • 因为它过去并没有那么慢:-)。由于 xdebug 中 testsuite 唯一使用的是覆盖率分析,我不希望它会因错误而减慢速度。
  • 其实xdebug.default_enable=0消除了单个测试用例的差异,所以stacktrace收集确实是cuplrits之一,感谢提示!不幸的是,它并不能解决完整的测试套件,所以肯定还有其他问题。
  • 另外还有一个迹象表明在这种情况下发生了一些可疑的事情 - phpunit 的输出在 ob_start/ob_end_clean 块内发生错误后消失了。
  • 20 分钟的大部分时间是均匀分布在多个测试用例上还是全部浪费在一个测试用例上?

标签: php phpunit xdebug output-buffering


【解决方案1】:

我的测试很慢,因为我出于某种我现在不记得的原因启用了 show_local_vars。 http://xdebug.org/docs/all_settings 希望这些信息对您有所帮助。

【讨论】:

  • 这实际上不是我的情况。
【解决方案2】:

由于探查器处于开启状态,我遇到了这个问题,这也会生成巨大的缓存研磨文件。

检查 xdebug.profiler_enable = 0

> documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2023-04-01
    • 2020-05-31
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多