Richieste di lunga durata con gunicorn + nginx


8

Ho creato un server di integrazione per la nostra applicazione basata su Django. Alcune funzionalità sono ancora sperimentali e comportano richieste eccessivamente lunghe.

Sto bene con le scarse prestazioni, per ora, ma devo essere in grado di integrarmi. Ogni volta che utilizziamo la funzione che porta a una lunga richiesta, l'app si blocca (come previsto) e quindi, dopo forse un minuto e mezzo, restituisce un "502 - Bad Gateway". Il resto dell'app funziona bene.

Ho controllato il registro di Gunicorn e ogni volta che succede ho una linea simile

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

tuttavia, ciò accade molto prima del timeout effettivo del lavoratore, che ho impostato su 10 minuti solo per essere sicuro. Ecco parte dello script upstart che esegue 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

Sto eseguendo la versione 0.13.4 di Gunicorn. Qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


5

502 Bad Gatewaysignifica che il tuo lavoratore gunicorno è in timeout. È possibile aggiungere --timeoutun'opzione al gnuicorncomando. L'impostazione predefinita è 30 secondi.

Come osserva @ greg-k, l' proxy_read_timeoutopzione di Nginx controlla ancora un altro timeout. Se viene visualizzato un 504 Gateway Timeouterrore, è possibile regolare questa opzione.


È da un po 'che non mi preoccupo di questo, ma ... non è lo stesso per l' -topzione che ho già avuto nella domanda?
Matt Luongo,

3

Questo è forse un problema con la tua configurazione nginx. Hai configurato il valore proxy_read_timeout?

Questa direttiva imposta il timeout di lettura per la risposta del server proxy. Determina per quanto tempo nginx attenderà per ottenere la risposta a una richiesta. Il timeout non viene stabilito per l'intera risposta, ma solo tra due operazioni di lettura.

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


Sono appena passato a un server più grande / più veloce per lo sviluppo ($$ :(), ma se si ripresenta testerò il tuo suggerimento!
Matt Luongo,
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.