我遇到了可怕的错误消息,可能是经过艰苦的努力,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技巧或调试伏都教可以帮助我发现并解决问题?