Como resolver o erro crítico de tempo limite do trabalhador gunicorn?

26

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

sm
fonte
1
Você pode fornecer mais informações, por favor? A linha de comando que você está usando para iniciar o Gunicorn seria um bom começo.
Supervacuo
Trace o trabalhador para ver onde ele está ficando preso:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog
Qual é o aplicativo que você está executando? Você pode aumentar o tempo limite padrão.
Burhan Khalid
Sim Burhan Khalid, por enquanto eu aumentei proxy_read_timeout para 1200 no nginx e timeout para 3600 na configuração do gunicorn. Espero que isso funcione
sm
@sm - funcionou?
precisa saber é o seguinte

Respostas:

29

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

No aumento do Nginx proxy_connect_timeoute proxy_read_timeout, você pode adicionar o seguinte no arquivo nginx.conf sob a httpdiretiva. 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.

Sreekanth
fonte
2
Essa solução salvou minha vida depois que eu estava procurando uma solução o dia inteiro. Se você realmente tem um processo que dura mais de 30 anos (que era o meu problema), essa é definitivamente a solução correta.
Alex P. Miller
Sim, mesmo que tenhamos um cenário com duração superior a 30 segundos, adotamos a solução. Bom, ajudou.
Sreekanth
Não temos esse cenário. Há um tráfego mínimo no local, mas os trabalhadores atingem o tempo limite todos os dias quase ao mesmo tempo. Em seguida, é executado após 1-2 minutos. Minha configuração é nginx - supervisor - gunicorn - django. Tenho um tempo limite de 120 segundos.
precisa saber é o seguinte
proxy_connect_timeout: "Define um tempo limite para estabelecer uma conexão com um servidor proxy. Deve-se observar que esse tempo limite geralmente não pode exceder 75 segundos ."
deweydb
@iamkhush você foi capaz de descobrir a correção para isso? Também estou enfrentando esse problema, mesmo quando meu aplicativo está ocioso. Os trabalhadores de Gunicorn atingem o tempo limite diário e nenhuma das soluções, como aumentar o tempo, parece funcionar.
Ankit Jaiswal 11/11