Como resolver o erro de timeout do gunicorn critical worker?

19

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 timeout e eu recebo erro

[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid

Depois disso, recebo o erro 502 Badgateway na página da web. Eu tenho que reiniciar o processo de 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 como esse,

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 começa de novo,

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é que eu reinicie o gunicorn. E quando eu estou recebendo este erro eu recebo 504 erro de gateway do nginx

    
por s.m 21.03.2013 / 16:30

1 resposta

21

Para corrigir isso, aumente o sinalizador de tempo limite em Nginx,

Em Nginx aumentar proxy_connect_timeout e proxy_read_timeout, você pode adicionar o seguinte no arquivo nginx.conf

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Reinicie o servidor Nginx

Se a correção acima não funcionar, aumente o sinalizador de tempo limite do Gunicorn na configuração do Gunicorn, o tempo limite do Gunicorn padrão é de 30 segundos.

- tempo limite 90

Documentação do Gunicorn sobre tempo limite

-t INT, --timeout INT 30 Trabalhadores em silêncio por mais de tantos segundos são mortos e reiniciados.

Geralmente definido para trinta segundos. Apenas defina isso consideravelmente mais alto se você tiver certeza das repercussões para os trabalhadores de sincronização. Para os trabalhadores que não são de sincronização, isso significa apenas que o processo de trabalho ainda está se comunicando e não está vinculado ao período de tempo necessário para manipular uma única solicitação.

Gunicorn Docs on Timeouts do Trabalhador

Espero que isso resolva isso.

    
por 11.09.2014 / 08:35