So sieht die Meldung aus
PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/wp-admin/includes/class-wp-upgrader.php on line 214Häufige Ursachen
- Eine langsame Datenbankabfrage, eine langsame externe API oder ein großer Import oder Export.
- Die Aufgabe ist einfach größer als das Standardlimit: Updates, Backups, Bildstapel.
- Eine Endlosschleife oder ein Warten auf etwas, das nie eintritt.
- Das Limit wurde für PHP erhöht, aber nginx oder ein Proxy bricht früher ab (dann siehst du stattdessen 504).
- Die Kommandozeile hat kein Limit (Standard 0), das Problem zeigt sich also nur im Browser.
Prüfen
- Welches Limit nutzt PHP-FPM?
grep -rn 'max_execution_time' /etc/php/*/fpm/ - Den aktiven Wert aus Sicht des Webservers prüfen
php-fpm8.3 -i | grep -i max_execution_time - Ist das Timeout des Webservers kürzer?
nginx -T 2>/dev/null | grep -E 'fastcgi_read_timeout|proxy_read_timeout'
Lösung
- Den langsamen Teil (Abfrage, API-Aufruf) finden und beschleunigen. Das ist die eigentliche Lösung.
- Das Limit dort erhöhen, wo es nötig ist:
max_execution_time = 120in der FPM-php.inioderphp_admin_value[max_execution_time] = 120im Pool, dann PHP-FPM neu laden. fastcgi_read_timeoutin nginx passend erhöhen, sonst gibt es zuerst einen 504.- Lange Aufgaben als Cronjob, Queue-Worker oder CLI-Befehl statt in einer Webanfrage ausführen.
- Im eigenen Code
set_time_limit()nur für das eine Skript aufrufen, das es braucht.
Häufige Fragen
Warum bekomme ich nach dem Erhöhen von max_execution_time weiter einen 504?
nginx hat ein eigenes Limit, standardmäßig 60 Sekunden. Siehe upstream timed out (110).
Ist ein sehr hohes Limit unbedenklich?
Ein langes Limit lässt eine hängende Anfrage lange einen Worker blockieren. Es sollte so niedrig bleiben, wie es die echte Aufgabe zulässt.