PHP Out of memory-Fehler beheben — PHP-Speicher erhöhen
TL;DR
Wenn PHP mit einer “Out of memory”-Meldung abstürzt, ist die schnellste Lösung ein Neustart des Webservers. Die dauerhafte Lösung besteht darin, das PHP-Memory-Limit zu erhöhen oder das betroffene Skript zu optimieren. Dieser Beitrag erklärt vier praktikable Methoden, beschreibt typische Fallstricke (mod_php vs. PHP-FPM vs. CGI) und liefert eine Schritt-für-Schritt-Checkliste zum Troubleshooting.
Fehlerbeispiel
Beim Moderieren von Kommentaren erschien statt des Admin-Dashboards folgende Fehlermeldung:
PHP Fatal error: Out of memory (allocated 49545216) (tried to allocate 77824 bytes) in /home/xxxxx/public_html/xyz/admin.php(1758) on line 40
Schnellheilung: Ein Neustart des Apache httpd löste das Problem kurzfristig. Ursache: Ein PHP-Skript benötigte mehr Arbeitsspeicher als das aktuell erlaubte memory_limit.
Kurzüberblick: Warum passiert das
PHP hat eine Konfigurationsoption memory_limit, die die maximale Menge an Arbeitsspeicher pro Skript begrenzt. Ist ein Skript speicherhungrig (große Arrays, unkontrollierte Schleifen, Bilderverarbeitung), schlägt die Ausführung fehl, sobald das Limit erreicht ist. Hosting-Umgebungen setzen dieses Limit oft restriktiv.
Vier Methoden, das Memory-Limit zu erhöhen
Die Reihenfolge entspricht typischer Wirksamkeit und Zugriffsrechte.
1. Permanent in php.ini anpassen
- Ermitteln, welche php.ini verwendet wird: Erstelle eine Datei check.php im Document Root mit diesem Inhalt:
Rufe die Datei im Browser auf und suche nach “Loaded Configuration File” — das ist die aktive php.ini (häufig /usr/local/lib/php.ini).
- Öffne diese php.ini in einem Texteditor und ändere die Direktive:
memory_limit = 32M
- Apache oder PHP-FPM neu starten, damit die Änderung greift.
Hinweis: Erhöhe schrittweise (z. B. 8M → 16M → 32M → 64M), prüfe Stabilität und Seitenauslastung.
2. Zur Laufzeit mit ini_set
Wenn du keine php.ini ändern kannst, versuche in der betroffenen Datei, möglichst früh, folgendes einzufügen:
ini_set('memory_limit', '32M');
Wichtig: ini_set wirkt nur, wenn die Konfiguration auf dem Server dies zulässt und die Anweisung vor speicherintensiven Operationen steht.
3. Über .htaccess (nur bei mod_php)
Falls der Server mod_php (Apache-Modul) nutzt, kannst du in die .htaccess:
php_value memory_limit 32M
Achtung: Bei CGI/FastCGI/PHP-FPM führt php_value in .htaccess zu einem Serverfehler. Dann nutze eine andere Methode.
4. WordPress-spezifisch: wp-config.php
Für WordPress-Seiten kannst du in die wp-config.php eine Erhöhung setzen:
define('WP_MEMORY_LIMIT', '32M');
Diese Einstellung wirkt nur, wenn der Hoster keine niedrigere Server-Vorgabe erzwingt.
Was tun, wenn die Änderungen keine Wirkung zeigen
- Prüfe, ob du die richtige php.ini bearbeitet hast (siehe phpinfo-Ausgabe).
- Prüfe, ob PHP als Modul (mod_php) oder als PHP-FPM/CGI läuft. .htaccess funktioniert nicht mit PHP-FPM.
- Manche Hoster setzen Limits serverseitig (z. B. im Apache-VHost oder via suhosin). Wende dich an den Hosting-Support.
- Bei geteiltem Hosting kann ein physisches Limit durch den Provider bestehen; ein Upgrade oder ein Wechsel auf VPS/Managed-Server kann nötig sein.
PHP-FPM-spezifische Hinweise
Bei PHP-FPM muss das memory_limit in der globalen php.ini oder in der Pool-Konfiguration gesetzt werden. Pool-Dateien liegen beispielsweise unter /etc/php/7.x/fpm/pool.d/*.conf; nach Änderung PHP-FPM neu starten:
systemctl restart php7.x-fpm
Optimieren statt immer erhöhen
Das dauerhafte Erhöhen des Limits ist nicht immer die beste Lösung. Prüfe:
- Werden große Arrays korrekt unset() gemacht?
- Gibt es unendliche Rekursionen oder unerwartet hohe Schleifen?
- Können Daten gestreamt statt vollständig geladen werden (z. B. CSV, Bilder)?
Optimierung reduziert langfristig Betriebskosten und steigert Stabilität.
Kompatibilitätsmatrix kurz
- mod_php (Apache): .htaccess und php.ini-Einträge wirken.
- PHP-FPM: Pool- und php.ini-Einstellungen; .htaccess wirkungslos.
- CGI/FastCGI: php_value in .htaccess verursacht Fehler; nutze ini_set oder php.ini.
Triage-Playbook (SOP) — Schritt für Schritt
- Fehlerlog prüfen (PHP- und Webserver-Logs).
- Kurzfristig: Webserver neu starten (z. B. systemctl restart apache2).
- phpinfo()-Seite erstellen und aktive php.ini lokalisieren.
- memory_limit schrittweise erhöhen (php.ini oder ini_set).
- PHP-FPM/Apache neu starten und Verhalten beobachten.
- Wenn weiter: Debuggen welches Skript den hohen Verbrauch verursacht (Profiling, var_dump memory_get_usage()).
- Host kontaktieren, wenn Limits serverseitig erzwungen werden.
Testfälle und Akzeptanzkriterien
- Nach Erhöhung: Die ausgegebene Fehlermeldung darf nicht mehr erscheinen.
- Lasttest: Das Skript läuft mehrfach parallel ohne Out-of-memory innerhalb der erwarteten Last.
- Logs: Keine neuen PHP memory warnings in error.log.
Checkliste nach Rolle
- Entwickler: Prüfe Code auf speicherintensive Stellen und setze ini_set nur temporär.
- Systemadministrator: Ändere php.ini oder Pool-Konfiguration und überwache RAM/Swap.
- Hosting-Support: Prüfe Provider-Limits und dokumentiere, ob serverseitige Beschränkungen bestehen.
Kurzer Diagnosemodus: Befehle und Snippets
- phpinfo(): zeigt die verwendete php.ini.
- memory_get_usage(): prüft aktuellen Verbrauch in Scripts.
Beispiel zur Laufzeit-Messung:
echo 'Memory usage: ' . memory_get_usage(true) . " bytes\n";
Wann diese Maßnahmen nicht reichen
- Wenn ein Plugin oder Skript ein Memory-Leak hat, hilft nur Debugging oder ein Patch.
- Bei massivem Traffic kann ein einzelnes Server-Upgrade nötig sein.
- Bei restriktivem Shared Hosting ist ein Wechsel des Hosting-Plans oft die pragmatische Lösung.
Faktenkasten
- Default memory_limit in vielen alten PHP-Versionen: 8M (veraltet).
- Empfohlene Minimalwerte für CMS: WordPress oft 64M–128M, komplexe Anwendungen benötigen mehr.
Kurze Zusammenfassung
Fehler “Out of memory” bedeutet, das PHP-Skript braucht mehr Speicher als erlaubt. Kurzfristig hilft ein Serverneustart; dauerhaft erhöht man das memory_limit über php.ini, ini_set, .htaccess (nur mod_php) oder wp-config.php (WordPress). Prüfe immer, welche PHP-Laufzeitumgebung (mod_php, PHP-FPM, CGI) aktiv ist und ob der Hoster serverseitige Limits erzwingt. Optimiere Skripte, bevor du den Speicher unbegrenzt erhöhst.
Bildquelle: Clarkandransom
Ähnliche Materialien

DM‑Verity auf Pixel 7 und 7 Pro deaktivieren

Netflix offline: Filme & Serien herunterladen

Flash-Whitelist unter Windows RT schnell hinzufügen

Photoshop CS5 mit Wine auf Ubuntu 10.10

Netflix herunterladen: Filme & Serien offline
