【问题标题】:Python Django Celery is taking too much memoryPython Django Celery 占用了太多内存
【发布时间】:2017-04-14 10:05:11
【问题描述】:

我正在运行一个 celery 服务器,它有 5,6 个任务要定期运行。连续执行 5.6 天后,Celery 占用了太多内存。

Celery 文档非常混乱。我正在使用以下设置。

# celeryconfig.py
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'xxx.settings'
# default RabbitMQ broker
BROKER_URL = "amqp://guest:guest@localhost:5672//"

from celery.schedules import crontab
# default RabbitMQ backend
CELERY_RESULT_BACKEND = None

#4 CONCURRENT proccesess are running.
CELERYD_CONCURRENCY = 4

# specify location of log files
CELERYD_LOG_FILE="/var/log/celery/celery.log"

CELERY_ALWAYS_EAGER = True

CELERY_IMPORTS = (
    'xxx.celerydir.cron_tasks.deprov_cron_script',

                )

CELERYBEAT_SCHEDULE = {
    'deprov_cron_script': {
    'task': 'xxx.celerydir.cron_tasks.deprov_cron_script.check_deprovision_vms',
    'schedule': crontab(minute=0, hour=17),
    'args': ''
    }
}

我正在使用 nohup 命令运行 celery 服务(这将在后台运行)。

 nohup celery beat -A xxx.celerydir &

【问题讨论】:

  • 多少才算太多?每个 Celery 工作人员占用大约 150mb 的 RAM 空间是正常的
  • 2GB RAM 占用 80%(5.6 天后)。
  • 这可能是您的 Python/Django 程序中的内存泄漏。您的程序是否使用任何大型列表或字典?它是纯 Python 的,还是有任何用 C 编写的模块?
  • 代码是纯 python 但使用像 5000 个对象这样的大列表。除了 celery 之外,此服务器上没有其他任何东西在运行。我想我在配置中遗漏了一些东西。
  • 命令的输出来检查进程的资源使用情况。 # top -H -p 19531 19531 root 20 0 857m 405m 8068 S 0.0 21.6 8:19.07 [celery beat] b 19538 root 20 0 857m 405m 8068 S 0.0 21.6 0:00.28 /usr/bin/python

标签: django python-2.7 celery django-celery nohup


【解决方案1】:

查看文档后。我开始知道 DEBUG 在设置中是 True

只需在设置中更改 DEBUG 的值即可。

REF:https://github.com/celery/celery/issues/2927

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多