Я зіткнувся з жахливим повідомленням про помилку, можливо, через кропіткі зусилля, у PHP не вистачає пам'яті:
Дозволений обсяг пам’яті #### байт вичерпано (намагався виділити #### байт) у файлі file.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 або налагодження вуду можуть допомогти мені знайти та виправити проблему?