Diese Meldung heißt, dass eine einzelne PHP-Anfrage mehr im Speicher halten wollte, als ihr erlaubt ist. Das Limit gilt je Anfrage, nicht je Server: 256M Limit heißt nicht, dass der Server 256M hat.
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
134217728 sind 128M. Die Zahl in der Meldung ist immer das aktuelle Limit, Sie müssen es also nie nachschlagen.
Wo Sie es erhöhen
- EGPNL - PHP-Einstellungen der Website, und das ist der richtige Ort, weil es Updates überlebt.
- php.ini -
memory_limit = 256M, für den ganzen Pool. - wp-config.php -
define("WP_MEMORY_LIMIT", "256M");nur für WordPress.
Ein Limit über 512M versteckt fast immer einen Fehler. Eine ganze Tabelle in ein Array zu lesen oder eine ganze Datei, statt sie zu streamen, gehört repariert und nicht gefüttert.
Finden, was ihn frisst
echo round(memory_get_peak_usage(true)/1048576, 1) . ' MB';
Setzen Sie das ans Ende der langsamen Seite, und es druckt die Spitze. Dann halbieren: die Hälfte der Arbeit auskommentieren und schauen, welcher Hälfte die Spitze folgt.
Die zwei üblichen Ursachen
- Eine unbegrenzte Abfrage. SELECT ohne LIMIT auf einer gewachsenen Tabelle. Blättern Sie durch.
- Eine Bildbibliothek auf einer großen Datei. Ein 6000px breites Foto kostet weit mehr Speicher, als seine Dateigröße vermuten lässt, denn geladen liegt es unkomprimiert da.
Ein Cronjob, der bei 128M scheitert und bei 512M läuft, ist nicht repariert. Er scheitert wieder, wenn die Daten wachsen, um drei Uhr nachts.