【发布时间】:2013-04-10 16:52:23
【问题描述】:
我的专用服务器有 32GB 内存,内存不断增加,我现在必须每天重新启动它。这让我付出了客户和金钱的代价。
我很难找到内存泄漏的位置。我在网上只能找到人们说“使用 xdebug”,但我找不到任何有关查找内存泄漏的 xdebug 教程。我曾尝试在函数调用之前和之后打印 memory_get_usage 但这是正确的方法吗?
我有许多 php 脚本正在运行 - 一些来自访问者,另一些来自 cron 作业 - 我需要找到其中哪些正在泄漏内存并尽快修复它,但我什至不知道如何确定一个给定函数是否泄漏内存。
我曾尝试在函数调用之前和之后打印 memory_get_usage,它会上升,但如果我多次调用该函数,它就不会再上升了。谁能解释一下并告诉我如何简单轻松地判断 PHP 函数是否存在内存泄漏?
【问题讨论】:
-
我正在考虑这样做...将整个内容复制到另一台服务器,一次只运行一个,看看是什么原因造成的。虽然昂贵且耗时...没有办法在 PHP 中对内存进行单元测试?
-
我不知道。我也很好奇。我投了你一票,也许我们都会发现。
-
我同意@TomášZato。您可以使用
auto_append_file脚本和memory_get_*方法来记录您的所有脚本并注意重的脚本。 -
您是否尝试过使用
ps监控顶级内存使用者?即一个简单的 cron 作业来转储ps的输出(带有适当的标志),这样您就可以看到哪些进程每分钟使用的内存最多。检查您对ps的风格,以按内存使用情况排序并输出完整的进程详细信息(例如进程+完整的命令行和环境。)
标签: php memory-management memory-leaks