Процесс CeleryBeat потребляет всю память ОС

Мы используем

django-celery==3.1.10
celery==3.1.20
python 2.7.13

Мы написали CustomDataBaseScheduler для планирования задачи, которая прекрасно спланирует задачу вовремя. Мы запускаем процесс CeleryBeat как init script, но celeryBeat потребляет полную память системы, то есть 24 ГБ в день.

Я попытался запустить pmap на процесс celerybeat, но он показывает, что [anon] занимает большую часть памяти.

Кто-нибудь может помочь отладить и исправить это.

Ответ 1

Прежде всего, если вы используете django 1.8 или выше, используйте сельдерей 4.0 и выше. В этом случае вам не понадобится джанго-сельдерей. Также в этом случае следуйте этому руководству. http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

Приходя к вашей проблеме, это может быть одной из следующих причин:

  • Ваши рабочие перегружены. Попробуйте использовать concurrency, как указано здесь
  • Проверьте, установлены ли в настройках django DEBUG значение True. Это может привести к утечкам памяти, и сельдерей предупреждает об этом при запуске.
  • Проверьте исправления утечки памяти в history. Для меня это выглядело следующей версией после вашего, 3.1.21, чтобы быть точным, имеет некоторые исправления утечки памяти. Попробуйте перейти на последнюю версию 3.x(только если вы не можете использовать 4.x по любой причине.)
  • Если все остальное не удается, попробуйте некоторые инструменты мониторинга, чтобы отладить сценарий о том, что происходит. Некоторые средства мониторинга упоминаются здесь.