Maximale Ausführungsdauer überschritten
PHP stoppte ein Skript, das länger lief als es erlaubt war. Das Limit hat seinen Job gemacht; die Frage ist, ob der Job in eine Web-Anfrage gehörte.
Fatal error: Maximum execution time of 30 seconds exceeded
Eine Seite, die mehr als dreißig Sekunden benötigt, hat ein Problem zu beheben; ein Import, der zehn Minuten benötigt, muss irgendwo laufen, ein Timeout gilt nicht.
Die wahrscheinlichsten Ursachen zuerst.
Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.
| Ursache | So prüfen Sie es | Lösung |
|---|---|---|
| Ein Bulk Job läuft im Browser | Der Fehler folgt einer Aktion, die Sie in wp-admin gestartet haben, und stoppt bei jedem Versuch zur gleichen Zeit. | Führen Sie es von WP-CLI aus, wo das Limit nicht gilt, oder in Blöcken, die den Fortschritt aufzeichnen und wieder aufnehmen. |
| Ein Update oder eine Installation über einen langsamen Link | Der Fehler passiert beim Herunterladen und nicht während der Verarbeitung, und größere Pakete scheitern, während kleine erfolgreich sind. | Heben Sie die Begrenzung für den Admin-Kontext an oder installieren Sie sie aus dem Dateisystem anstelle von HTTP. |
| Ein langsamer Outbound-Call innerhalb einer Seite | Eine gewöhnliche Front-End-URL ist betroffen und die Website hängt von einem Drittanbieter-Service ab, der einen schlechten Tag hat. | Bound die ausgehende Anfrage mit einem eigenen Timeout und Cache das Ergebnis, anstatt die Skript-Limit um sie herum zu erhöhen. |
| Das Limit gilt, wenn Sie es nicht erwartet haben | Der Wert unterscheidet sich zwischen der CLI, der Webanforderung und cron - jeder Kontext kann einen anderen tragen. | Ändern Sie es dort, wo der Job tatsächlich läuft. Ein erhöhtes Weblimit tut nichts für einen Job, der unter cron ausgeführt wird. |
| Eine unendliche Schleife | Die Zeit wird ohne Netzwerk- und Datenbankaktivität verbracht, und der gleiche Codepfad wiederholt sich in einem Profiler. | Wenn man das Limit hier anhebt, bedeutet das nur, dass die Seite länger stecken bleibt, bevor sie aufgibt. |
Schritt für Schritt zur Lösung.
Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.
Finden Sie heraus, welche Grenze gilt, wo
Die Kommandozeile und die Webanforderung teilen sich normalerweise keinen Wert.
php -i | grep max_execution_time php -r 'echo ini_get("max_execution_time"), PHP_EOL;'Verlegen Sie den Job dorthin, wo das Limit nicht gilt
WP-CLI läuft ohne Wanduhr darüber, weshalb lange Jobs dort hingehören.
wp plugin install some-plugin --activate
Wenn es in einer Anforderung ausgeführt werden muss, heben Sie es nur für diesen Pfad an
Scoped auf den admin-kontext und nicht auf alles, was die website dient.
wp config set WP_MEMORY_LIMIT '256M'
Überprüfen Sie, ob die Zeit Outbound geht
Wenn das Skript auf dem Server eines anderen wartet, ist das Limit nicht das, was geändert werden muss.
wp eval 'var_dump( wp_remote_get( "https://example.com", [ "timeout" => 5 ] ) );'
Bestätigen Sie, dass es jetzt fertig ist
Führen Sie den gleichen Job erneut aus und sehen Sie ihn vollständig an, anstatt davon auszugehen, dass er es tut.
time wp cron event run --due-now
Darum kümmert sich die Plattform.
Ausführungslimits werden für den Admin- und Cron-Kontext erhöht und dort gelassen, wo sie für Web-Anfragen gehören, so dass ein Import Raum zum Abschluss hat, ohne auch eine öffentliche Seite für Minuten laufen zu lassen. WP-CLI ist auf jedem Plan für die Jobs verfügbar, die niemals in einem Browser-Tab hätten sein sollen, und geplante Arbeit läuft auf einem echten Scheduler statt in jemandes Seitenlast.
Häufige Fragen.
Warum ist das Limit 30 Sekunden?
Gilt das Limit für WP-CLI?
Ich habe es angesprochen und der Job scheitert immer noch an der gleichen Stelle.
Ist das dasselbe wie ein 504?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.