诊断内存泄漏 - 允许的内存大小为 # 字节已耗尽
我遇到了可怕的错误消息,可能是通过艰苦的努力,PHP已经耗尽了内存:
文件中允许的内存大小为 #### 字节已用尽(尝试分配 #### 字节).php第 123 行
提高限制
如果您知道自己在做什么,并希望提高限制,请参阅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技巧或调试巫毒教可以帮助我找到并解决问题?