Ich habe Nginx und Gunicorn verwendet, um meine Website auf zwei Servern zu hosten.
Beide Server haben die gleichen Versionen von Paketen und die Website wird erfolgreich gehostet.
Aber in einem meiner Server Gunicorn bekommt immer Timeout und ich bekomme Fehler
[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid
Und danach bekomme ich 502 Badgateway Fehler in der Webseite. Ich muss den Gunicorn-Prozess neu starten, um die Website aufzurufen.
Es folgt das Fehlerprotokoll:
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [22140] [INFO] Booting worker with pid: 22140
Und ich bekomme kontinuierliche Fehler wie diesen,
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:57 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
Und Arbeiter fängt wieder an,
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [22276] [INFO] Booting worker with pid: 22276
EPIPE-Fehler erneut ignorieren und dies wird fortgesetzt, bis ich den Gunicorn neu starte. Und wenn ich diesen Fehler erhalte, erhalte ich einen 504-Gateway-Fehler von nginx
strace -p <PID> -e trace=network -t
Antworten:
Um dies zu beheben, erhöhen Sie das Timeout-Flag in Nginx.
In Nginx erhöhen
proxy_connect_timeout
undproxy_read_timeout
können Sie in der Datei nginx.conf unter derhttp
Direktive Folgendes hinzufügen . Sie sind standardmäßig auf 60s eingestellt.proxy_connect_timeout 300s;
proxy_read_timeout 300s;
Starten Sie den Nginx-Server neu. Informationen zu Timeouts finden Sie in den Nginx-Dokumenten .
Wenn das oben genannte Update nicht funktioniert, erhöhen Sie das Gunicorn-Timeout-Flag in der Gunicorn-Konfiguration. Das Standard-Gunicorn-Timeout beträgt 30 Sekunden.
- Timeout 90
Gunicorn-Dokumentation zum Timeout
-t INT, --timeout INT 30 Arbeiter, die länger als diese Sekunden still sind, werden getötet und neu gestartet.
Im Allgemeinen auf 30 Sekunden eingestellt. Stellen Sie diesen Wert nur dann merklich höher ein, wenn Sie sicher sind, welche Auswirkungen dies auf Sync-Worker hat. Für die nicht synchronisierten Worker bedeutet dies lediglich, dass der Worker-Prozess noch kommuniziert und nicht an die Zeitdauer gebunden ist, die für die Bearbeitung einer einzelnen Anforderung erforderlich ist.
Gunicorn Docs auf Worker Timeouts
Hoffe das löst es.
quelle