我遇到了一个可怕的错误消息,可能是经过了艰苦的努力,PHP 已经耗尽了内存:
第123行的 file.php 中允许内存大小为 # # # # 字节(尝试分配 # # # 字节)
如果你知道你在做什么,并且想要增加限制,请参阅 内存限制:
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 技巧或调试巫术可以帮助我找到并修复这个问题?