Wie behebt man den gunicorn Critical Worker Timeout Fehler?

26

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

sm
quelle
1
Können Sie uns bitte weitere Informationen geben? Die Befehlszeile, mit der Sie Gunicorn starten, wäre ein guter Anfang.
Supervacuo
Verfolgen Sie den Arbeiter, um zu sehen, wo er stecken bleibt:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog
Was ist die Anwendung, die Sie ausführen? Möglicherweise möchten Sie das Standardzeitlimit erhöhen.
Burhan Khalid
Ja, Burhan Khalid, im Moment habe ich das proxy_read_timeout auf 1200 in Nginx und das timeout auf 3600 in Gunicorn-Konfiguration erhöht. Hoffe, das funktioniert
sm
@sm - hat es funktioniert?
Iamkhush

Antworten:

29

Um dies zu beheben, erhöhen Sie das Timeout-Flag in Nginx.

In Nginx erhöhen proxy_connect_timeoutund proxy_read_timeoutkönnen Sie in der Datei nginx.conf unter der httpDirektive 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.

sreekanth
quelle
2
Diese Lösung hat mir das Leben gerettet, nachdem ich den ganzen Tag nach einer Lösung gesucht hatte. Wenn Sie wirklich einen Prozess haben, der länger als 30 Sekunden läuft (was mein Problem war), dann ist dies definitiv die richtige Lösung.
Alex P. Miller
Ja, selbst wenn das Szenario länger als 30 Sekunden dauert, haben wir die Lösung übernommen. Schön, dass es geholfen hat.
Sreekanth
Wir haben kein solches Szenario. Vor Ort herrscht ein minimaler Verkehr, aber die Arbeiter haben jeden Tag fast zur gleichen Zeit eine Zeitüberschreitung. Läuft dann nach 1-2 Minuten. Mein Setup ist Nginx - Supervisor - Gunicorn - Django. Ich habe ein Timeout von 120 Sekunden.
Iamkhush
proxy_connect_timeout: "Definiert ein Zeitlimit für den Verbindungsaufbau mit einem Proxy-Server. Es ist zu beachten, dass dieses Zeitlimit in der Regel 75 Sekunden nicht überschreiten darf ."
Deweydb
@iamkhush Konnten Sie das Update dafür herausfinden? Dieses Problem tritt auch dann auf, wenn meine Anwendung inaktiv ist. Das tägliche Timeout der Gunicorn-Arbeiter und keine der Lösungen wie das Erhöhen des Timeouts scheinen zu funktionieren.
Ankit Jaiswal