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
strace -p <PID> -e trace=network -t
Odpowiedzi:
Aby to naprawić, zwiększ limit czasu w Nginx,
W Nginx zwiększ
proxy_connect_timeout
iproxy_read_timeout
możesz dodać następujące w pliku nginx.conf zgodnie zhttp
dyrektywą. 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.
źródło