gunicorn + nginx로 장기 실행 요청 “/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py”, line 111, in run

Django 기반 애플리케이션을위한 통합 서버를 구성했습니다. 일부 기능은 아직 실험 중이므로 요청이 너무 길어집니다.

현재로서는 성능이 좋지 않지만 통합 할 수 있어야합니다. 긴 요청으로 이어지는 기능을 사용할 때마다 앱이 예상대로 정지 된 다음 1 분 반 후에 ‘502-Bad Gateway’가 반환됩니다. 나머지 응용 프로그램은 정상적으로 작동합니다.

나는 gunicorn 로그를 확인했으며, 이것이 일어날 때마다 다음과 같은 줄을 얻습니다.

2012-01-20 17:30:13 [23128] [DEBUG] GET /results/
2012-01-20 17:30:43 [23125] [ERROR] WORKER TIMEOUT (pid:23128)
Traceback (most recent call last):
  File "/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py", line 111, in run
    os.setpgrp()
OSError: [Errno 1] Operation not permitted

그러나 이것은 실제 작업자 시간 초과 이전에 발생하며 확인을 위해 10 분으로 설정했습니다. 다음은 gunicorn을 실행하는 upstart 스크립트의 일부입니다.

description "..."

start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 5 seconds
kill timeout 5
respawn

env VENV="/path/to/a/virtual/env/"

#how to know the pid
pid file $VENV/run/guniconr-8080.pid

script
exec sudo -u demo $VENV/bin/gunicorn_django --preload --daemon -w 4 -t 600 --log-level debug --log-file $VENV/run/gunicorn-8080.log -p $VENV/run/gunicorn-8080.pid -b localhost:8080 /path/to/settings.py
end script

gunicorn 버전 0.13.4를 실행 중입니다. 도움을 주시면 감사하겠습니다.



답변

502 Bad Gateway귀하의 gunicorn 일꾼이 시간 초과되었음을 의미합니다. 명령 에 --timeout옵션을 추가 할 수 있습니다 gnuicorn. 기본값은 30입니다.

@ greg-k가 지적한 것처럼 proxy_read_timeoutNginx의 옵션은 또 다른 시간 초과를 제어합니다. 당신이 볼 경우 504 Gateway Timeout오류가이 옵션을 조정할 수 있습니다.


답변

이것은 아마도 nginx 구성에 문제가있을 수 있습니다. proxy_read_timeout 값을 구성 했습니까?

이 지정 문은 프록시 서버의 응답에 대한 읽기 제한 시간을 설정합니다. nginx가 요청에 대한 응답을 기다리는 시간을 결정합니다. 시간 초과는 전체 응답이 아니라 두 번의 읽기 작업 사이에서만 설정됩니다.

출처 : http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout


답변