2012-01-22 3 views
3

Django 기반 애플리케이션 용 통합 서버를 구축했습니다. 몇 가지 기능은 아직 실험 중이며 지나치게 긴 요청이 있습니다.gunicorn + nginx로 장기 실행 요청

성능이 좋지 않아도 괜찮습니다. 그러나 지금은 통합 할 수 있어야합니다. 긴 요청으로 이어지는 기능을 사용할 때마다 응용 프로그램이 (예상대로) 정지 한 다음 1 분 30 초 후 '502 - 잘못된 게이트웨이'를 반환합니다. 나머지 애플 리케이션은 잘 작동합니다.

은 내가 gunicorn 로그를 확인하고,이 발생할 때마다 나는 그러나,이 난 그냥 확인 10 분으로 설정 한 실제 작업자 타임 아웃, 오래 전에 발생

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 

같은 라인을 얻을. 여기 gunicorn을 실행하는 신생 스크립트의 일부입니다.

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를 실행 중입니다. 어떤 도움이라도 대단히 감사하겠습니다.

이 질문은 cross-post from ServerFault입니다.

답변

3

gunicorn에 직접 연결 하시겠습니까? 또는 그 사이에 ngnix 정도입니까? 내가 정확히 기억한다면 nginx에는 90 초의 타임 아웃이있다. 여담으로

, 같은 병 성능의 요청에 대해,이 일반적으로 두 가지 솔루션입니다 :

  • 캐시 결과 및 계산을 수행하고 채워 사용자 정의 장고 관리 명령을 호출하는 cron 작업을 얻을 은닉처.

  • celery와 같은 비동기 작업 큐는 실제 계산을 수행하며 준비가되었는지 여부를 확인하기 위해 별도의 요청을합니다.

+0

제목에서 알 수 있듯이 nginx를 사용하고 있습니다. 테스트를 위해 타임 아웃을 10 분으로 설정했지만, 타임 아웃을 더 일찍 종료합니다 (그러나 90 초보다 길어집니다). –

+0

무시해도 될까요, 아마도 90 초가 넘지 않았을 것입니다 ... 그 번호를 어디서 얻었는지에 대한 참고 자료가 있습니까? –

+0

... 또한 일반적인 경우 장기 실행 요청을 처리하는 방법을 알고 있습니다. 이것은 성능이 떨어지는 통합 서버에 더 나은 하드웨어로 배포 할 수 있어야하는 개발 중 기능이며, 개발이 끝난 후에도 요청은 오래 가지 못합니다. –

0

Gunicorn에서 Asynchronous workers을 사용해 보셨습니까?

느린 요청 등에 특히 좋습니다.

+0

아니요,하지만 저는 확신합니다. 문제는 잘못된 것입니다. 그 이후로 우리는 성능 문제를 해결 했으므로 완전히 해결할 필요가 없었습니다. 앞으로 Gunicorn 직원을 비동기로 사용할 수없는 데에는 여러 가지 이유가 있습니다. –