NeuBlack Friday – 50 % Rabatt auf die erste Zahlung
WordPress-Fehlerbehebung

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

Kurzantwort

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.

Diagnose

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.

UrsacheSo prüfen Sie esLösung
Eine ausgehende HTTP-Anfrage ohne TimeoutDie 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 dahinterDie 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 wirdDas 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 SeitenlastenDie 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 ArbeitAlles 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.
Anleitung

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.

  1. 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 10
  2. Fragen 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
  3. Ü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
  4. 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
  5. 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'
Mit MagicWP

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

Häufige Fragen.

Sollte ich einfach das Timeout erhöhen?
Selten und nie zuerst. Ein höherer Timeout bedeutet, dass der Besucher länger wartet, bevor er den gleichen Fehler sieht, und es entfernt die Decke, die eine einzelne Anfrage stoppt, die einen Mitarbeiter auf unbestimmte Zeit bindet.
Warum wird die gleiche Seite manchmal gut geladen?
Eine API von Drittanbietern mit einer schlechten Minute oder eine Abfrage, die in Ordnung ist, bis der Cache kalt ist, erzeugen beide eine Seite, die funktioniert, bis sie nicht funktioniert.
Mein Import wird jedes Mal genau zum gleichen Zeitpunkt ausgelesen.
Das ist eher ein Limit als ein Zufall. Führen Sie es von WP-CLI aus oder in Stücken, die ihre Position aufzeichnen, so dass ein unterbrochener Lauf fortgesetzt wird, anstatt sich zu wiederholen.
Wird eine 504 durch die Verbindung meiner Besucher verursacht?
Nein. Es wird zwischen dem Webserver und PHP generiert, beide auf der Serverseite. Ein Besucher mit einer langsamen Verbindung sieht eine langsame Seite, keine 504.
Verwandte Fehler

War es keiner davon?

Diese Fehler können im Browser ähnlich aussehen.