Celery-使用低内存资源管理任务

时间:2018-11-05 14:20:33

标签: python-3.x memory celery

我将分享一个内存问题,并且我希望对处理低内存资源和芹菜任务的策略有所反应。

问题

在我的简化情况下:

系统: 我有30个CPU线程和30 Go的RAM

芹菜:

任务“ A” = 30分钟(平均)实时计算| RAM消耗最大峰值600Mo。用户作业发送的所有“ A”任务均被删除。

任务“ B” = 75分钟(平均)实时计算时间| RAM消耗的最大峰值为13 Go。用户作业发送的所有“ B”任务都会被2乘以2。

  1. 规则1

因此,我的第一种方法是设置任务'A'中最高的priority

@app.task(name='A', priority=9)

意味着要迅速处理此类任务。

  1. 规则2

我设置了一个事实,即在 1 作业中只能并行启动 2 任务“ B”。这样我就没有溢出我的最大RAM

  1. 规则3

我还设置为如果我的15Go RAM较少,则可以启动任何任务。

结果

您现在要说的是,它可以正常工作……但不是真的,因为工作是由网站提交的,因此任何用户都可以发送工作。

首先,如果我有15Go的可用RAM,则可以根据需要启动所有 2 'B'组任务。因此,只有2个用户仅发送了2个“ B”任务,这是一部完整的戏...

在一个理想的世界中,如果可用内存资源太少,我想暂停所有“ B”任务期望为1。

也许一种解决方案是修复最大数量的'B'和'A'任务,例如 2 'B'任务和 6 “ A”任务最多同时执行。但是,我不知道该如何处理芹菜。

芹菜命令

celery -A my_website worker -l info --autoscale 30

那么如何避免RAM资源溢出?

非常感谢您的帮助或建议。

0 个答案:

没有答案