2015-05-16 24 views
6

Mam konfigurację produkcyjną do uruchamiania pracowników do selekcji w celu wysłania żądania POST/GET do usługi zdalnej i przechowywania wyniku. Obsługuje obciążenie około 20 tys. Zadań na 15 min.Pracownik selekcji wisi bez żadnego błędu.

Problem polega na tym, że pracownicy drżą bez powodu, bez błędów, bez ostrzeżeń.

Próbowałem również dodać wiele procesorów, ten sam wynik.

W dzienniku widzę wzrost czasie wykonywania zadania, jak udało się s

Więcej szczegółów spojrzeć na https://github.com/celery/celery/issues/2621

+0

Czy "Przechowywanie odpowiedzi w MongoDB" części asynchroniczny? Masz logi do tego? –

Odpowiedz

11

Jeśli pracownik seler utknąć czasami można użyć strace & lsof aby dowiedzieć się, przy którym wywołaniu systemowym utknie.

Na przykład

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

10268 jest numerem PID pracownika selera recvfrom(5 oznacza, że ​​pracownik zatrzymuje się odbierania danych z deskryptora.

Następnie można użyć lsof, aby sprawdzić, co jest 5 w tym procesie roboczym.

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) 
...... 

To oznacza, że ​​pracownik utknąć na połączenie TCP (widać 5u w FD kolumna).

Niektóre pakiety python jak requests blokuje czekać dane z każdym, może to spowodować zawiesza pracownik seler, jeśli używasz requests, upewnij się, aby ustawić timeout argument.


Widziałeś tę stronę:

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

Powiązane problemy