2015-05-16 13 views
6

Ho una configurazione di produzione per l'esecuzione di operatori di sedici per effettuare una richiesta POST/GET al servizio remoto e memorizzare i risultati. Gestisce il carico intorno a 20k attività per 15 min.Il lavoratore Celery si blocca senza errori

Il problema è che i lavoratori diventano insensibili senza motivo, senza errori, senza avvisi.

Ho provato ad aggiungere anche multiprocessing, lo stesso risultato.

Nel registro vedo l'aumento del tempo di esecuzione delle applicazioni, come è riuscito a s

Per maggiori dettagli guardare https://github.com/celery/celery/issues/2621

+0

è "Memorizzazione della risposta in MongoDB" parte asincrono? Hai dei registri per quello? –

risposta

11

Se il lavoratore sedano si blocca a volte, è possibile utilizzare strace & lsof per scoprire al quale sistema si blocca.

Ad esempio:

$ strace -p 10268 -s 10000 
Process 10268 attached - interrupt to quit 
recvfrom(5, 

10268 è il pid di lavoratore sedano, recvfrom(5 significa che il lavoratore si ferma a ricevere i dati dal descrittore di file.

Quindi è possibile utilizzare lsof per verificare ciò che è 5 in questo processo di lavoro.

lsof -p 10268 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
...... 
celery 10268 root 5u IPv4 828871825  0t0  TCP 172.16.201.40:36162->10.13.244.205:wap-wsp (ESTABLISHED) 
...... 

indica che il lavoratore si blocca in una connessione TCP (si può vedere in 5uFD colonna).

Alcuni pacchetti python come requests sta bloccando aspettare i dati da pari, ciò può causare si blocca lavoratori sedano, se si utilizza requests, assicurarsi di impostare timeout argomento.


Hai visto questa pagina:

https://www.caktusgroup.com/blog/2013/10/30/using-strace-debug-stuck-celery-tasks/

Problemi correlati