Ich bin auf die gefürchtete Fehlermeldung gestoßen, möglicherweise durch mühsame Bemühungen, PHP hat keinen Speicher mehr:
Zulässige Speichergröße von #### Bytes erschöpft (versucht, #### Bytes zuzuweisen) in file.php in Zeile 123
Das Limit erhöhen
Wenn Sie wissen, was Sie tun und das Limit erhöhen möchten, lesen Sie memory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
In acht nehmen! Möglicherweise lösen Sie nur das Symptom und nicht das Problem!
Diagnose des Lecks:
Die Fehlermeldung zeigt auf eine Zeile mit einer Schleife, von der ich glaube, dass sie Speicher verliert oder sich unnötig ansammelt. Ich habe memory_get_usage()
am Ende jeder Iteration Anweisungen gedruckt und kann sehen, dass die Anzahl langsam wächst, bis sie das Limit erreicht:
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
}
Für die Zwecke dieser Frage nehmen wir an, dass sich der schlimmste vorstellbare Spaghetti-Code irgendwo in $user
oder im globalen Bereich versteckt Task
.
Welche Tools, PHP-Tricks oder das Debuggen von Voodoo können mir helfen, das Problem zu finden und zu beheben?