У меня есть следующая настройка:
- Общий рабочий пул с 100 рабочими
- Высокопоставленный рабочий пул с 50 рабочими
- Я использовал такие большие числа, потому что большую часть времени мои задачи тратят ожидания ввода-вывода с очень длинными таймаутами (выполнение HTTP-запросов, на которые может отвечать до 20 секунд)
- Использование RabbitMQ в качестве брокера
- Я установил celeryd как deamon, используя скрипты init.d из gellub celery'd со следующими параметрами:
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"
Моя проблема заключается в том, что иногда очередь кажется "резервной", то есть она перестанет потреблять задачи. Кажется, для этого есть сценарии:
- В брокере наблюдается медленное наращивание "неподтвержденных" сообщений, хотя
celery inspect active
покажет, что не все рабочие израсходованы, то есть я увижу только несколько активных задач - Очередь просто перестанет потреблять новые задачи без наращивания.
- Когда в "мертвом" состоянии использование
strace
на рабочих процессах ничего не возвращает... полностью нулевая активность от рабочего
Буду признателен за любую информацию или указатели на:
- Как я могу его отладить. Я могу использовать
strace
, чтобы посмотреть, что делают рабочие процессы, но до сих пор было полезно сообщить мне, что рабочий висит - Как я могу контролировать это, и возможно сделать автовосстановление. Существует множество инструментов для управления сельдереем (
flower
иevents
, но они оба превосходны в режиме реального времени, но не имеют никакой функции автоматического мониторинга/предупреждения). Мне просто лучше писать собственные инструменты мониторинга с помощью supervisord?
Кроме того, я начинаю свои задания с django-celery