我目前正在调试一个经常遇到OutOfMemory异常的脚本。它作为cronjob运行,通常运行良好,但是当cronjob有一段时间没有运行时(无论出于什么原因),脚本必须处理排队的许多元素,并且将遇到outofmemory异常。
通过检查代码,我无法发现问题。我相信其中一个迭代函数调用可能会泄漏内存,但我不确定哪一个以及在哪里。
当OutOfMemory异常发生时,是否可以让php转储堆?我很可能能从那里发现问题。
最佳答案
虽然我不能找到一个“垃圾堆例外”选项,但我确实找到了get_defined_vars()
它基本上是一个堆转储,如果从全局范围调用的话。通过这个,我可以看到在我的记忆中有数以百计(实际上是数以千计)的仍然引用的数据库行。这是由于一个未被释放的MySQL结果资源在臭名昭著的函数中导致泄漏。我找到它并修好了。现在运行良好。
关于php - 在OutOfMemory异常上有PHP转储堆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4014250/