504 Gateway Timeout
PHP funktionierte noch, als der Webserver das Warten aufgab. Nichts stürzte ab - es dauerte einfach länger als das Timeout erlaubte.
504 Gateway Timeout
Etwas in der Anforderung ist langsam, und das Erhöhen des Timeouts bedeutet nur, länger auf dieselbe Seite zu warten. Identifizieren Sie zuerst den langsamen Schritt: eine Abfrage, einen ausgehenden API-Aufruf oder einen Import, der innerhalb einer Webanforderung ausgeführt wird.
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 |
|---|---|---|
| Eine ausgehende HTTP-Anfrage ohne Timeout | Die langsame URL ruft einen Dritten auf - eine Lizenzprüfung, einen Feed, ein Zahlungsgateway. Es ist schnell, wenn dieser Dienst schnell ist. | Legen Sie beim ausgehenden Anruf ein explizites Timeout fest und speichern Sie die Antwort. WordPress wartet standardmäßig viel länger als jeder Besucher. |
| Eine Abfrage ohne Index dahinter | Die langsame Seite ist ein gefiltertes Archiv oder ein Bericht, und die Datenbank zeigt die gleiche Abfrage oben unter Laden an. | Ein Scan, der in zehntausend Zeilen in Ordnung war, ist ein Timeout bei einer Million. |
| Ein Import oder Export, der in einer Web-Anfrage ausgeführt wird | Das Timeout findet nur bei einer Admin-Aktion statt, die Sie gestartet haben, und es scheitert bei jedem Versuch ungefähr zur gleichen verstrichenen Zeit. | Verlegen Sie den Job auf WP-CLI oder einen gehackten Hintergrundlauf. Ein Browser-Tab ist der falsche Ort für die Arbeit, gemessen in Minuten. |
| Cron häufen sich bei Seitenlasten | Die Verzögerung landet sporadisch auf gewöhnlichen Front-End-URLs auf einer Website mit einer lange überfälligen Ereignisliste. | Deaktivieren Sie WP-Cron und fahren Sie es aus dem System-Scheduler, so dass die geplanten Arbeiten nicht mehr dem Besucher berechnet werden, der zuerst ankommt. |
| Die Auszeit ist wirklich zu kurz für die Arbeit | Alles oben genannte ist ausgeschlossen und der Betrieb ist legitim lang - ein großes Backup, eine große Medienkonvertierung. | Wenn man es global anhebt, wird die Obergrenze aufgehoben, die eine schlechte Anfrage verhindert, die einen Arbeiter beschäftigt. |
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 URL langsam ist
Das Access Log zeichnet auf, wie lange jede Anfrage dauerte. Sortieren Sie danach und die Antwort ist normalerweise eine Zeile.
awk '{print $NF, $7}' /var/log/nginx/access.log | sort -rn | head -n 10Fragen Sie die Datenbank, was sie Zeit damit verbringt
Eine lang laufende Abfrage wird hier angezeigt, während die Seite noch geladen wird.
mysql -e 'SHOW FULL PROCESSLIST;' | head -n 20
Überprüfen Sie, ob cron der Passagier ist
Eine längst überfällige Liste bedeutet, dass geplante Arbeiten von Besuchern durchgeführt werden.
wp cron event list --status=due --fields=hook,next_run_relative
Verschieben Sie den Long Job aus der Anforderung
Derselbe Import, der in einem Browser ausfällt, wird normalerweise von der Befehlszeile aus abgeschlossen, da nichts darauf wartet.
wp import large-file.xml --authors=create
Nur jetzt, betrachten Sie die Timeout
Und heben Sie es für den Weg, der es braucht, anstatt überall.
wp config set WP_MAX_MEMORY_LIMIT '512M'
Darum kümmert sich die Plattform.
Geplante Arbeit läuft auf einem echten System-Scheduler und nicht auf dem Besucher, der ankommt, so dass die häufigste zufällige Ursache für eine langsame Seite von Anfang an fehlt. Lange Jobs haben ihre eigenen Grenzen im Cron-Kontext, anstatt die für Web-Anfragen gedachten auszuleihen, und Container pro Site bedeuten, dass eine Anfrage, die lange läuft, nur Ihre Mitarbeiter beschäftigt.
Häufige Fragen.
Sollte ich einfach das Timeout erhöhen?
Warum wird die gleiche Seite manchmal gut geladen?
Mein Import wird jedes Mal genau zum gleichen Zeitpunkt ausgelesen.
Wird eine 504 durch die Verbindung meiner Besucher verursacht?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.