Eu usei o nginx e o gunicorn para hospedar meu site em dois servidores,
Ambos os servidores têm as mesmas versões de pacotes e o site é hospedado com sucesso,
Mas em um dos meus servidores gunicorn sempre fica com o tempo limite e eu recebo erro
[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid
E depois disso eu recebo o erro 502 Badgateway na página da web. Eu tenho que reiniciar o processo gunicorn para abrir o site.
A seguir está o log de erros:
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
E eu recebo um erro contínuo assim,
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
E o trabalhador recomeça,
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
Ignorando novamente o erro EPIPE e isso continua até eu reiniciar o gunicorn. E quando estou recebendo esse erro, recebo um erro de gateway 504 do nginx
strace -p <PID> -e trace=network -t
Respostas:
Para corrigir isso, aumente o sinalizador de tempo limite no Nginx,
No aumento do Nginx
proxy_connect_timeout
eproxy_read_timeout
, você pode adicionar o seguinte no arquivo nginx.conf sob ahttp
diretiva. Eles assumem o padrão de 60s.proxy_connect_timeout 300s;
proxy_read_timeout 300s;
Reinicie o servidor Nginx. Veja os documentos do nginx sobre tempos limite .
Se a correção acima não funcionar, aumente o sinalizador de tempo limite do Gunicorn na configuração do Gunicorn, o tempo limite padrão do Gunicorn é 30 segundos.
- timeout 90
Documentação do Gunicorn sobre timeout
-t INT, --timeout INT 30 Trabalhadores em silêncio por mais de tantos segundos são eliminados e reiniciados.
Geralmente definido como trinta segundos. Defina isso notavelmente mais alto se tiver certeza das repercussões para os trabalhadores de sincronização. Para os trabalhadores sem sincronização, isso significa apenas que o processo do trabalhador ainda está se comunicando e não está vinculado ao período de tempo necessário para lidar com uma única solicitação.
Documentos do Gunicorn sobre tempos de espera do trabalhador
Espero que isso resolva.
fonte