Come risolvere l'errore di timeout del lavoratore critico del gunicorno?


26

Ho usato nginx e gunicorn per ospitare il mio sito Web in due server,

Entrambi i server hanno le stesse versioni di pacchetti e il sito Web è ospitato correttamente,

Ma in uno dei miei server il gunicorn riceve sempre il timeout e ricevo un errore

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

E dopo questo ottengo un errore 502 Badgateway nella pagina web. Devo riavviare il processo di gunicorn per visualizzare il sito Web.

Di seguito è riportato il registro degli errori:

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 ricevo un errore continuo come questo,

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 il lavoratore ricomincia,

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

Ancora una volta Ignorando l'errore EPIPE e questo continua fino a quando non riavvio il gunicorn. E quando ricevo questo errore ottengo l'errore gateway 504 da nginx


1
Potete fornire maggiori informazioni, per favore? La riga di comando che stai usando per avviare Gunicorn sarebbe un buon inizio.
supervacuo,

Traccia il lavoratore per vedere dove si blocca:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog,

Qual è l'applicazione in esecuzione? Potrebbe essere necessario aumentare il timeout predefinito.
Burhan Khalid,

Sì Burhan Khalid, per ora ho aumentato proxy_read_timeout a 1200 in nginx e timeout a 3600 in configurazione gunicorn. Spero che
funzioni

@sm - ha funzionato?
iamkhush,

Risposte:


29

Per risolvere questo problema, aumentare il flag di timeout in Nginx,

In Nginx aumenta proxy_connect_timeoute proxy_read_timeout, puoi aggiungere quanto segue nel file nginx.conf sotto la httpdirettiva. Sono predefiniti a 60 anni.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Riavvia il server Nginx. Consulta i documenti nginx sui timeout .

Se la correzione precedente non funziona, quindi aumentare il flag di timeout di Gunicorn nella configurazione di Gunicorn, il timeout di Gunicorn predefinito è di 30 secondi.

--timeout 90

Documentazione di Gunicorn sul timeout

-t INT, --timeout INT 30 I lavoratori in silenzio per più di così tanti secondi vengono uccisi e riavviati.

Generalmente impostato su trenta secondi. Impostalo sensibilmente più in alto solo se sei sicuro delle ripercussioni per i lavoratori sincronizzati. Per i lavoratori non sincronizzati significa solo che il processo del lavoratore sta ancora comunicando e non è legato al tempo necessario per gestire una singola richiesta.

Documenti di Gunicorn sui timeout dei lavoratori

Spero che questo lo risolva.


2
Questa soluzione mi ha salvato la vita dopo aver cercato una soluzione tutto il giorno. Se hai davvero un processo che dura più di 30 anni (che era il mio problema), allora questa è sicuramente la soluzione corretta.
Alex P. Miller,

Sì, anche se abbiamo uno scenario che dura più di 30 secondi, quindi abbiamo adottato la soluzione. Bello, mi ha aiutato.
Sreekanth,

Non abbiamo uno scenario del genere. Vi è un traffico minimo sul posto, ma i lavoratori scadono ogni giorno quasi alla stessa ora. Quindi inizia a correre dopo 1-2 minuti. La mia installazione è nginx - supervisore - gunicorn - django. Ho un timeout di 120 secondi.
iamkhush,

proxy_connect_timeout: "Definisce un timeout per stabilire una connessione con un server proxy. Va notato che questo timeout di solito non può superare i 75 secondi ."
Deweydb,

@iamkhush sei riuscito a capire la soluzione per questo? Sto affrontando anche questo problema anche quando la mia applicazione è inattiva. I timeout dei lavoratori Gunicorn ogni giorno e nessuna delle soluzioni come aumentare il timeout sembra funzionare.
Ankit Jaiswal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.