Solicitações demoradas com gunicorn + nginx

8

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

Por enquanto, estou bem com o fraco desempenho, mas preciso ser capaz de integrar. Sempre que usamos o recurso que leva a uma solicitação longa, o aplicativo trava (conforme o esperado) e, depois de um minuto e meio, retorna um '502 - Bad Gateway'. O resto do aplicativo funciona bem.

Eu verifiquei o registro do gunicorn e, sempre que isso acontece, 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 limite do trabalhador real, que eu configurei para 10 minutos apenas para garantir. Aqui está parte do script inicial que roda 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 executando a versão 0.13.4 do gunicorn. Qualquer ajuda seria muito apreciada.

Matt Luongo
fonte

Respostas:

5

502 Bad Gatewaysignifica que seu trabalhador gunicorn está esgotado Você pode adicionar uma --timeoutopção ao gnuicorncomando O padrão é 30s.

Como observa o @ greg-k, a proxy_read_timeoutopção do Nginx controla mais um tempo limite. Se você vir um 504 Gateway Timeouterro, poderá ajustar esta opção.

Fish Monitor
fonte
Já faz um tempo desde que me preocupo com isso, mas - não é o mesmo na -topção que eu já tinha na pergunta?
precisa saber é o seguinte
3

Talvez este seja um problema com sua configuração do nginx. Você configurou o valor proxy_read_timeout?

Esta diretiva define o tempo limite de leitura para a resposta do servidor proxy. Determina quanto tempo o nginx aguardará para obter a resposta a uma solicitação. O tempo limite é estabelecido não para toda a resposta, mas apenas entre duas operações de leitura.

Fonte: http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout

Greg K
fonte
Acabei de me mudar para um servidor maior / mais rápido para o desenvolvimento ($$ :(), mas se isso vem de novo eu vou testar sua sugestão!
Matt Luongo