Solicitações de longa duração com gunicorn + nginx

8

Eu montei um servidor de integração para o nosso aplicativo com Django. Alguns dos recursos ainda são experimentais e resultam em solicitações excessivamente longas.

Estou bem com o fraco desempenho, por enquanto, mas preciso integrar. Sempre que usamos o recurso que leva a uma solicitação longa, o aplicativo trava (como esperado) e, em seguida, depois de um minuto e meio, retorna um '502 - Gateway inválido'. O restante do aplicativo funciona bem.

Eu verifiquei o log do gunicorn, e sempre que isso acontece eu recebo uma linha como

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

no entanto, isso acontece muito antes do tempo de espera real do trabalhador, que eu defini para 10 minutos apenas para ter certeza. Aqui está parte do script upstart que roda o 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

Estou usando a versão 0.13.4 do gunicorn. Qualquer ajuda seria muito apreciada.

    
por Matt Luongo 21.01.2012 / 00:17

2 respostas

5

502 Bad Gateway significa que seu funcionário de gúnio está esgotado. Você pode adicionar a opção --timeout ao comando gnuicorn . O padrão é 30s.

Como @ greg-k notes, a opção proxy_read_timeout do Nginx controla ainda outro tempo limite. Se você vir 504 Gateway Timeout error, poderá ajustar essa opção.

    
por 29.12.2012 / 05:35
3

Esse talvez seja um problema com sua configuração do nginx. Você configurou o valor de proxy_read_timeout?

This directive sets the read timeout for the response of the proxied server. It determines how long nginx will wait to get the response to a request. The timeout is established not for entire response, but only between two operations of reading.

Fonte: link

    
por 06.06.2012 / 20:28