诊断内存泄漏 - 允许#bytes的内存大小耗尽
我遇到了可怕的错误消息,可能通过艰苦的努力,PHP内存不足:
在第123行的file.php中,####字节的允许内存大小耗尽(尝试分配####字节)
如果您知道自己在做什么并希望增加限制,请参阅memory_limit:
ini_set('memory_limit', '16M');ini_set('memory_limit', -1); // no limit
谨防!你可能只是解决症状而不是问题!
错误消息指向一条带有循环的行,我认为该循环正在泄漏或不必要地累积内存。我memory_get_usage()
在每次迭代结束时打印语句,可以看到数字慢慢增长,直到达到极限:
foreach ($users as $user) { $task = new Task; $task->run($user); unset($task); // Free the variable in an attempt to recover memory print memory_get_usage(true); // increases over time}
对于这个问题的目的,让我们假设最坏的面条代码可以想象在全球范围内的某处藏匿在$user
或Task
。
什么工具,PHP技巧或调试巫毒可以帮助我找到并解决问题?
PIPIONE
江户川乱折腾