php - 在 OutOfMemory 异常时让 PHP 转储堆

标签 php debugging out-of-memory heap-dump

我目前正在调试一个经常遇到 OutOfMemory 异常的脚本。它作为 cronjob 运行并且通常运行良好,但是当 cronjob 有一段时间没有运行时(无论出于何种原因)脚本必须处理许多排队的元素并将遇到 OutOfMemory 异常。

通过检查代码,我无法发现问题。我相信其中一个迭代函数调用可能会泄漏内存,但我不确定是哪一个以及在哪里。 当发生 OutOfMemory 异常时,是否可以选择让 PHP 转储堆?我也许可以从那里发现问题(很有可能)。

最佳答案

虽然我找不到“异常时转储堆”选项,但我确实找到了 get_defined_vars() 如果从全局范围调用,它基本上是一个堆转储。使用它,我能够看到在我的内存中有数百(实际上是数千)个仍然引用的数据库行。这是由于导致泄漏的臭名昭着的函数中某处未释放 mysql 结果资源。我找到它并修复了它。现在运行良好。

关于php - 在 OutOfMemory 异常时让 PHP 转储堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4014250/

相关文章:

Excel "Out of Memory"运行宏错误仅发生在内存最多的机器上

php - 将多个参数 POST 到 PHP 到 MYSQL 数据库

php - 退出 php 时返回 json

debugging - 如何设置我的环境以在 Blackberry 设备上进行调试?

python - `inspect.trace()` 与 `traceback`

java - 大型 XML 的 XML 节点到字符串转换

php - 从对象中选择随机项目

javascript - 使用 Symfony 打开具有动态值的模态

c++ - KDevelop调试警告: Failed to set controlling terminal: Operation not permitted

linux - oom-killer 杀死 Docker 中的 java 应用程序 - 报告内存使用不匹配