我将分享一个内存问题,并且我希望对处理低内存资源和芹菜任务的策略有所反应。
在我的简化情况下:
系统: 我有30个CPU线程和30 Go的RAM
芹菜:
任务“ A” = 30分钟(平均)实时计算| RAM消耗最大峰值600Mo。用户作业发送的所有“ A”任务均被删除。
任务“ B” = 75分钟(平均)实时计算时间| RAM消耗的最大峰值为13 Go。用户作业发送的所有“ B”任务都会被2乘以2。
因此,我的第一种方法是设置任务'A'中最高的priority
。
@app.task(name='A', priority=9)
意味着要迅速处理此类任务。
我设置了一个事实,即在 1 作业中只能并行启动 2 任务“ B”。这样我就没有溢出我的最大RAM
我还设置为如果我的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资源溢出?
非常感谢您的帮助或建议。