Jak rozwiązać błąd przekroczenia limitu czasu krytycznego pracownika gunicorn?


26

Użyłem nginx i gunicorn do hostowania mojej witryny na dwóch serwerach,

Oba serwery mają te same wersje pakietów, a witryna jest pomyślnie hostowana,

Ale na jednym z moich serwerów gunicorn zawsze dostaje limit czasu i pojawia się błąd

[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid

A potem pojawia się błąd 502 Badgateway na stronie. Muszę ponownie uruchomić proces gunicorn, aby wyświetlić stronę internetową.

Poniżej znajduje się dziennik błędów:

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

I dostaję taki błąd Continuos,

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

I pracownik zaczyna od nowa,

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

Znowu ignorowanie błędu EPIPE i trwa to do momentu ponownego uruchomienia gunicorn. A kiedy pojawia się ten błąd, otrzymuję błąd bramy 504 od nginx


1
Czy możesz podać więcej informacji? Polecenie, którego używasz do uruchomienia Gunicorn, byłoby dobrym początkiem.
— supervacuo

Śledź pracownika, aby zobaczyć, gdzie się zacina:strace -p <PID> -e trace=network -t
— Aryeh Leib Taurog

Z jakiej aplikacji korzystasz? Możesz zwiększyć domyślny limit czasu.
— Burhan Khalid

Tak Burhan Khalid, na razie zwiększyłem proxy_read_timeout do 1200 w nginx i limit czasu do 3600 w konfiguracji gunicorn. Mam nadzieję, że to
— zadziała

@sm - czy to zadziałało?
— iamkhush 16.04.16

Odpowiedzi:


29

Aby to naprawić, zwiększ limit czasu w Nginx,

W Nginx zwiększ proxy_connect_timeouti proxy_read_timeoutmożesz dodać następujące w pliku nginx.conf zgodnie z httpdyrektywą. Domyślnie mają 60 lat.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Uruchom ponownie serwer Nginx. Zobacz dokumenty Nginx dotyczące limitów czasu .

Jeśli powyższa poprawka nie działa, zwiększ flagę limitu czasu Gunicorn w konfiguracji Gunicorn, domyślny limit czasu Gunicorn wynosi 30 sekund.

- limit czasu 90

Dokumentacja Gunicorn o przekroczeniu limitu czasu

-t INT, --timeout INT 30 Pracownicy milczący dłużej niż przez wiele sekund są zabijani i restartowani.

Ogólnie ustawiony na trzydzieści sekund. Ustaw tę wartość zauważalnie wyżej tylko wtedy, gdy masz pewność konsekwencji dla pracowników synchronizacji. W przypadku pracowników niezsynchronizowanych oznacza to po prostu, że proces roboczy nadal komunikuje się i nie jest związany z czasem wymaganym do obsłużenia pojedynczego żądania.

Dokumenty Gunicorn dotyczące limitów czasu pracy

Mam nadzieję, że to rozwiązuje problem.


2
To rozwiązanie uratowało mi życie po tym, jak szukałem rozwiązania przez cały dzień. Jeśli naprawdę masz proces trwający dłużej niż 30 sekund (co było moim problemem), jest to zdecydowanie właściwe rozwiązanie.
— Alex P. Miller

Tak, nawet my mamy scenariusz, który działa dłużej niż 30 sekund, dlatego przyjęliśmy rozwiązanie. Fajnie, że pomogło.
— sreekanth

Nie mamy takiego scenariusza. Na miejscu jest niewielki ruch, ale pracownicy przekraczają limit czasu każdego dnia prawie o tej samej porze. Następnie biegnie po 1-2 minutach. Moja konfiguracja to nginx - supervisor - gunicorn - django. Mam limit czasu 120 sekund.
— iamkhush,

proxy_connect_timeout: "Definiuje limit czasu na ustanowienie połączenia z serwerem proxy. Należy zauważyć, że limit ten zwykle nie może przekraczać 75 sekund ."
— deweydb,

@iamkhush, czy udało Ci się znaleźć rozwiązanie tego problemu? Mam również do czynienia z tym problemem, nawet gdy moja aplikacja jest bezczynna. Pracownicy Gunicorn mają limit czasu każdego dnia i żadne z rozwiązań, takich jak zwiększenie limitu czasu, nie wydaje się działać.
— Ankit Jaiswal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.