Gunicorn 중요한 작업자 시간 초과 오류를 해결하는 방법?


26

nginx와 gunicorn을 사용하여 두 대의 서버에서 웹 사이트를 호스팅했습니다.

두 서버 모두 동일한 버전의 패키지가 있으며 웹 사이트가 성공적으로 호스팅됩니다.

그러나 내 서버 중 하나에서 gunicorn은 항상 시간 초과되고 오류가 발생합니다.

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

그리고이 후에 웹 페이지에 502 Badgateway 오류가 발생합니다. 웹 사이트를 열려면 gunicorn 프로세스를 다시 시작해야합니다.

다음은 오류 로그입니다.

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

그리고 나는 이와 같은 연속 오류를 얻습니다.

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

그리고 노동자는 다시 시작합니다

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 오류를 무시하면 gunicorn을 다시 시작할 때까지 계속됩니다. 그리고이 오류가 발생하면 nginx에서 504 게이트웨이 오류가 발생합니다.


1
더 많은 정보를 제공 할 수 있습니까? Gunicorn을 시작하는 데 사용하는 명령 줄은 좋은 시작입니다.
supervacuo

이 갇히지 어디 볼 수있는 노동자를 추적 :strace -p <PID> -e trace=network -t
Aryeh Leib Taurog

실행중인 응용 프로그램은 무엇입니까? 기본 시간 초과를 늘리고 싶을 수도 있습니다.
Burhan Khalid

예, Burhan Khalid, 지금은 nginx에서 proxy_read_timeout을 1200으로, gunicorn 구성에서는 timeout을 3600으로 늘 렸습니다. 이것이 작동
하길

@sm-작동 했습니까?
iamkhush

답변:


29

이 문제를 해결하려면 Nginx에서 시간 초과 플래그를 늘리십시오.

Nginx 증가 proxy_connect_timeoutproxy_read_timeout에서 http지시문 아래 nginx.conf 파일에 다음을 추가 할 수 있습니다 . 기본값은 60입니다.

proxy_connect_timeout 300;

proxy_read_timeout 300;

Nginx 서버를 다시 시작하십시오. 시간 초과에 대한 nginx 문서를 참조하십시오 .

위의 수정이 작동하지 않으면 Gunicorn 구성에서 Gunicorn 시간 초과 플래그를 늘리십시오. 기본 Gunicorn 시간 초과는 30 초입니다.

-타임 아웃 90

시간 초과에 대한 Gunicorn 설명서

-t INT, --timeout INT 30이 초 이상 침묵 한 작업자는 종료되었다가 다시 시작됩니다.

일반적으로 30 초로 설정됩니다. 동기화 워커에 대한 영향을 확신하는 경우에만이 값을 눈에 띄게 높게 설정하십시오. 비 동시 작업자의 경우 작업자 프로세스가 여전히 통신 중이며 단일 요청을 처리하는 데 필요한 시간과 관련이 없음을 의미합니다.

작업자 시간 초과에 대한 Gunicorn 문서

이것이 해결되기를 바랍니다.


2
이 솔루션은 하루 종일 솔루션을 찾은 후 생명을 구했습니다. 실제로 30 초 이상 실행되는 프로세스 (내 문제)가 있다면 이것이 올바른 해결책입니다.
Alex P. Miller

예, 30 초 이상 실행되는 시나리오도 있으므로 솔루션을 채택했습니다. 도움이되었습니다.
sreekanth

우리는 그런 시나리오가 없습니다. 사이트에 최소 트래픽이 있지만 작업자는 거의 동시에 거의 시간을 초과합니다. 그런 다음 1-2 분 후에 실행됩니다. 내 설정은 nginx-관리자-gunicorn-django입니다. 시간이 120 초입니다.
iamkhush

proxy_connect_timeout : "프록시 서버와의 연결을 설정하기위한 시간 초과를 정의합니다.이 시간 초과 는 일반적으로 75 초를 초과 할 수 없습니다 ."
deweydb

@iamkhush 당신은 이것에 대한 수정을 알아낼 수 있었습니까? 내 응용 프로그램이 유휴 상태 일 때도이 문제에 직면하고 있습니다. Gunicorn 작업자는 매일 시간 초과되고 시간 초과 증가와 같은 솔루션은 작동하지 않는 것 같습니다.
Ankit Jaiswal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.