【问题标题】:phpdbg/phpunit throws error even when memory limit is -1即使内存限制为-1,phpdbg/phpunit 也会抛出错误
【发布时间】:2018-02-10 14:06:44
【问题描述】:

我有一台 32GB 的机器,运行 2000 多个测试用例,使用 phpdbg 进行代码覆盖。

phpdbg -qrr -d memory_limit=-1./vendor/phpunit/phpunit/phpunit --debug --verbose

运行一段时间后,即使memory_limit为-1也会抛出如下错误

map() 失败:[12] 无法分配内存 [PHP致命错误:内存不足(分配5830606848)(试图分配65536字节)]

【问题讨论】:

  • 你在运行什么会占用 5GB 内存的!!!!
  • 大约有 2000 个测试用例。我正在运行它们以进行代码覆盖。如果我只使用 phpunit 在没有代码覆盖的情况下运行它们,则需要 4GB 内存

标签: php phpunit phpdbg


【解决方案1】:

您可能会泄漏内存并且没有清理它。有些插件会报告每个测试使用了多少内存,还有一些插件会尝试自动清理——尽管随着 PHPunit v6+ 的更新,有些插件可能需要注意使用命名空间测试用例类。

尝试释放内存的是“mybuilder/phpunit-accelerator”,但如果您能找到特别占用内存的测试类,您可以手动将在 teardown() 函数中使用的变量清空。

确保您只为自己的代码(src/,也许还有测试/)收集覆盖率数据也将节省大量内存(和时间) - 但将“src/”目录列入白名单并且不要尝试将“供应商/”列入黑名单/排除。

【讨论】:

  • 谢谢.. 将尝试更新线程。但是php进程有最大限制吗?为什么即使机器有 32 GB,它也会在 5GB 之后被杀死。即使在没有代码覆盖的情况下运行,执行也会占用 4 GB 内存。
  • 嗨,Alister,你能分享为每个 UT 生成内存的插件吗?我试过但找不到。
  • 内存在 createApplicaiton @ Illuminate\Foundation\Testing\TestCase 处泄漏。它为每个测试用例增加了 2 MB。这似乎是 phpunit 的问题,没有可用的解决方案。
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多