【问题标题】:CeleryBeat Process consumes all OS memoryCeleryBeat 进程消耗所有操作系统内存
【发布时间】:2017-07-28 06:49:42
【问题描述】:

我们正在使用

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

我们编写了一个 CustomDataBaseScheduler 来调度任务,它可以完美地按时调度任务。我们将 CeleryBeat 进程作为 init 脚本运行,但 celeryBeat 消耗了系统的全部内存,即一天 24GB。

我尝试在 celerybeat 进程上运行 pmap,但它显示 [anon] 占用的内存最多。

有人可以帮忙调试和解决这个问题吗?

【问题讨论】:

  • 您是否查看过任何超时选项,例如CELERYD_TASK_TIME_LIMITstackoverflow.com/questions/17541452/…
  • 有没有机会在 settings.py 上使用 debug = True 运行?众所周知,这会导致 celery 内存泄漏:groups.google.com/forum/#!topic/celery-users/smV5tw59Ia4
  • 迁移到serverfault.com ?
  • 你的调试打开了吗?
  • 此参数适用于 CELERY Workers.. 虽然已尝试使用 .. ######## Celery Settings CELERY_TASK_RESULT_EXPIRES=120 # 2 分钟 CELERY_RESULT_BACKEND="amqp" CELERY_IGNORE_RESULT=True CELERY_SEND_EVENTS=False CELERY_EVENT_QUEUE_EXPIRES =60 但无效

标签: python python-2.7 celery django-celery


【解决方案1】:

首先,如果您使用 django 1.8 或更高版本,请使用 celery 4.0 及更高版本。在这种情况下,您将不需要 django-celery。同样在这种情况下,请遵循本教程。 http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

遇到您的问题可能是以下原因之一:

  1. 您的工作人员超载。尝试使用提到的并发here
  2. 检查您的 django 设置 DEBUG 是否设置为 True。它可能会导致内存泄漏,并且 celery 在运行时建议不要这样做。
  3. 检查history 中的内存泄漏修复。对我来说,您的下一个版本似乎是3.1.21,确切地说是修复了一些内存泄漏。尝试升级到最新的 3.x 版本(仅当您因任何原因无法使用 4.x 时。)
  4. 如果所有其他方法都失败了,请尝试使用一些监控工具来调试有关正在发生的情况的场景。提到了一些监控工具here

【讨论】:

  • django 是 1.7,所以不能使用 celery 4。在 settings.py 中调试是 True,但是我们使用 init 脚本来启动 celery,我们使用 INFO 而不是调试。
  • 我的意思是 debug 在 django settings.py 中。当你在 settings.py 中使用 django DEBUG=True 运行 celery 时,你会得到 this。关闭调试并检查它是否有效。
  • 尝试升级 django-celery==3.2.1 但它需要升级 django>=1.8 并且我们有 django==1.7 所以升级了 django-celery==3.1.17,它是 3.1 中的最新版本。也将尝试使用 debug=False。
  • 太好了,感谢@rmad17,在 django settings.py 中关闭 debug 修复了 celery beat 引起的内存问题..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2012-08-16
  • 2012-09-24
相关资源
最近更新 更多