So sieht die Meldung aus
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/html/wp-includes/class-wp-image-editor-imagick.php on line 612Häufige Ursachen
memory_limitist für die Aufgabe zu niedrig: große Bilder skalieren, ein großer Import, Composer, ein schweres Plugin.- Eine Schleife oder Abfrage lädt viel zu viele Daten auf einmal in den Speicher.
- Ein Speicherleck in einem lange laufenden Skript oder Worker.
- Das Limit wurde in der falschen
php.inierhöht: CLI und PHP-FPM lesen verschiedene Dateien. - Eine Panel- oder Pool-Einstellung überschreibt den globalen Wert.
Prüfen
- Welche php.ini nutzt die Kommandozeile, und wie hoch ist das Limit?
php --ini; php -r 'echo ini_get("memory_limit"), PHP_EOL;' - Wo ist memory_limit für FPM gesetzt?
grep -rn 'memory_limit' /etc/php/*/fpm/ - Welche Zeile ist gescheitert? Das Log lesen
grep -i 'memory size' /var/log/nginx/error.log /var/log/php8.3-fpm.log | tail -n 10
Lösung
- Das Limit in der Datei erhöhen, die PHP-FPM nutzt, z. B.
memory_limit = 512Min/etc/php/8.3/fpm/php.ini, danachsystemctl reload php8.3-fpm. - Pro Pool in der Pool-Datei
php_admin_value[memory_limit] = 512Msetzen. - Bei einem Panel wie Plesk den Wert in den PHP-Einstellungen der Domain ändern.
- Für Composer einmalig
COMPOSER_MEMORY_LIMIT=-1 composer installausführen. - Wächst das Skript immer weiter, die Ursache beheben: Daten in Teilen verarbeiten, große Variablen freigeben, keine ganzen Tabellen laden.
Häufige Fragen
Ist memory_limit = -1 (unbegrenzt) eine gute Idee?
Nicht für Webanfragen. Eine fehlerhafte Anfrage kann dann den gesamten RAM verbrauchen und den Server lahmlegen. Besser ein fester Wert, groß genug für die größte legitime Aufgabe.
Ich habe die php.ini geändert, aber nichts passiert.
Wahrscheinlich wurde die CLI-Datei bearbeitet, oder PHP-FPM wurde nicht neu geladen. Prüfen, welche Datei geladen ist, und den Dienst neu laden.