2015-05-16 2 views
6

У меня есть производственная установка для работы работников сельдерея для выполнения запроса POST/GET для удаленного обслуживания и сохранения результата. Он обрабатывает нагрузку около 20 тыс. Задач за 15 мин.Работник сельдерея висит без ошибок

Проблема в том, что рабочие оцепенели без причины, никаких ошибок, никаких предупреждений.

Я попытался добавить многопроцессорность и тот же результат.

В журнале я вижу увеличение времени выполнения задачи, как удалось с

Для получения более подробной информации смотрите на https://github.com/celery/celery/issues/2621

+0

ли "Сохранение ответа в MongoDB" часть асинхронных? Есть журналы для этого? –

ответ

11

Если сельдерей работник иногда застревают, вы можете использовать strace & lsof, чтобы выяснить, при которой система вызывает его застревание.

Например:

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

10268 является PID сельдерея работника, recvfrom(5 означает, что работник останавливается на прием данных из дескриптора файла.

Тогда вы можете использовать lsof, чтобы узнать, что такое 5 в этом процессе.

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

Это указывает на то, что работник застревают в связи TCP (вы можете увидеть 5u в FD колонке).

Некоторые питон пакеты, такие как requests блокирует ждать данных от сверстников, это может привести к сельдерей рабочих зависаний, если вы используете requests, пожалуйста, убедитесь, что установлен timeout аргумент.


Вы видели эту страницу:

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

 Смежные вопросы

  • Нет связанных вопросов^_^