【发布时间】: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