Подтвердить что ты не робот

Утечка памяти RabbitMQ/Celery/Django?

Недавно я принял еще одну часть проекта, над которым работает моя компания, и обнаружил, что, похоже, утечка памяти в нашей установке RabbitMQ/Celery.

Наша система имеет 2 ГБ памяти, с примерно 1,8 ГБ бесплатно в любой момент времени. У нас есть несколько задач, которые хрустят большие объемы данных и добавляют их в нашу базу данных.

Когда эти задачи выполняются, они потребляют довольно большой объем памяти, быстро падают в нашу доступную память в любом месте от 16Mb до 300Mb. Проблема в том, что после завершения этих задач память не возвращается.

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

  • RabbitMQ v2.7.1
  • AMQP 0-9-1/0-9/0-8 (получил эту строку от RabbitMQ startup_log)
  • Сельдерей 2.4.6
  • Django 1.3.1
  • amqplib 1.0.2
  • django-celery 2.4.2
  • kombu 2.1.0
  • Python 2.6.6
  • erlang 5.8

На нашем сервере работает Debian 6.0.4.

Я новичок в этой настройке, поэтому, если вам нужна какая-либо другая информация, которая может помочь мне определить, откуда эта проблема, сообщите мне.

Все задачи имеют возвращаемые значения, все задачи имеют ignore_result = True, для параметра CELERY_IGNORE_RESULT установлено значение True.

Большое спасибо за ваше время.

Мой текущий файл конфигурации:

CELERY_TASK_RESULT_EXPIRES = 30
CELERY_MAX_CACHED_RESULTS = 1
CELERY_RESULT_BACKEND = False
CELERY_IGNORE_RESULT = True
BROKER_HOST = 'localhost'
BROKER_PORT = 5672
BROKER_USER = c.celery.u
BROKER_PASSWORD = c.celery.p
BROKER_VHOST = c.celery.vhost
4b9b3361

Ответ 1

Я почти уверен, что вы используете эту настройку с помощью DEBUG = True, которая приводит к утечке памяти.

Отметьте это сообщение: Отключить Django Debugging для Celery.

Я отправлю свою конфигурацию в случае, если это поможет.

settings.py

djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_VHOST = "rabbit"
BROKER_USER = "YYYYYY"
BROKER_PASSWORD = "XXXXXXX"

CELERY_IGNORE_RESULT = True
CELERY_DISABLE_RATE_LIMITS = True
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
CELERY_ROUTES = ('FILE_WITH_ROUTES',)

Ответ 2

Вы можете нажать эту проблему в librabbitmq. Пожалуйста, проверьте, использует ли сельдерей librabbitmq>=1.0.1.

Простое исправление для попытки: pip install librabbitmq>=1.0.1.