Ho il seguente set-up:Come monitorare la salute della coda nel sedano
- piscina operaio generico con 100 lavoratori
- pool di lavoro ad alta priorità con 50 lavoratori
- ho usato così gran numero perché la maggior parte del tempo i miei compiti trascorrono in attesa di I/O con molto lunghi timeout (facendo le richieste HTTP che può richiedere fino a 20 anni per rispondere)
- uso RabbitMQ come il broker
- mi hanno istituito celeryd come un demone utilizzando l'init .d scripts da celery'd github, con i seguenti parametri:
CELERYD_OPTS="--time-limit=600 -c:low_p 100 -c:high_p 50 -Q:low_p low_priority_queue_name -Q:high_p high_priority_queue_name"
Il mio problema è, a volte la coda sembra "back up" ... cioè se non potrà smettere di consumare compiti. Sembra che ci siano a scenari di questo:
- C'è un accumulo lento di messaggi "non riconosciuti" nella broker, anche se
celery inspect active
mostrerà che non tutti i lavoratori sono esauriti - che è, ho solo la volontà vedere alcune attività attive - La coda smetterà di consumare nuove attività, senza l'accumulo.
- Quando nel suo stato "morto", utilizzando
strace
del lavoratore processi restituisce niente ... completamente a zero l'attività da parte del lavoratore
Gradirei qualsiasi informazione o indicazioni su:
- Come Posso eseguire il debug. Posso usare
strace
per vedere cosa stanno facendo i processi di lavoro, ma finora è stato utile per dirmi che il lavoratore è impiccato - Come posso monitorare questo, e possibile fare il recupero automatico. Esistono molti strumenti per la gestione del sedano (
flower
eevents
ma sono entrambi eccellenti in tempo reale, ma non dispongono di funzionalità di monitoraggio/allarme automatico). Sto forse meglio scrivendo i miei strumenti di monitoraggio con supervisord?
Inoltre, sto iniziando la mia attività da django-sedano
Hai risolto questo problema? – bouke
Questo è vecchio, ma due cause delle code di cui sono a conoscenza sono: (1) state creando attività all'interno delle attività. Se lo fai, alla fine arriverai al punto in cui non hai un lavoratore per consumare l'attività all'interno di un'attività, e ti congelerai. (2) Se stai usando le richieste, per fare molti download o altro, non ha un timeout predefinito, quindi può bloccarsi completamente se si verifica un errore di download. Una volta che un lavoratore si blocca, è fatto. – mlissner