芹菜:限制内存使用量(大量的django安装)

时间:2013-12-22 15:03:24

标签: celery django-celery

  • 我们在一个盒子上安装了大量单独的django安装程序。每个都有自己的代码库和linux用户。
  • 我们正在使用芹菜进行一些异步任务。
  • 每个装置都有自己的芹菜设置,即它自己的芹菜和&工人。
  • 每次安装的异步任务数量有限,而非时间关键。
  • 当一个工人启动它需要大约30mb的内存。当它运行一段时间后,这个数量可能会增长(可能是由于碎片化)。

最后一个要点已经(某种程度上)通过设置--maxtasksperchild解决了一个较低的数字(比如10)。这确保了在10个任务之后重新启动,之后内存至少会回到30MB。

然而,每个celeryd仍占用大量内存,因为最小工作量似乎是1而不是0.我还想象运行python manage.py celery worker不会导致最小的占用空间celeryd,因为即使发生的唯一事情是检查任务,也会加载完整的堆栈。

在理想的设置中,我希望看到以下内容:一个内存占用非常小(100k左右)的进程正在查看新任务的队列。当这样的任务出现时,它会在一个单独的进程中旋转(重)完整的django堆栈。当工人完成时,沉重的过程就会被摧毁。

这样的设置是否可以使用(某种程度上)标准芹菜进行配置?如果没有,那里有哪些扩展点?

我们(目前)正在使用芹菜3.0.17和相关的django-芹菜。

1 个答案:

答案 0 :(得分:0)

只是为了确保我理解 - 你有很多不同的django代码库,每个代码库都有自己的芹菜,当他们同时在一个盒子上运行时,它们会占用太多内存,所有这些都等待芹菜工作的下降管?我们在这里讨论了几个芹菜实例?

根据我的经验,您使用django芹菜的方式与设计方式完全不同 - 所有不同的django项目都应该压缩到由多个应用程序组成的一些(或单个)项目中。然后你设置了少量的队列来从不同的应用程序中搜索celery任务 - 这样,你只有尽可能多的休眠芹菜线程占用30mb,你有队列,一个队列可以处理多个任务(如果是多个应用程序,如果你要)。内存问题应该消失。

重申 - 你只需要一个芹菜,驱动多个工人。这样你的瓶颈就是工作并发,而不是休眠的内存需求。

为什么你需要这么多django装置?如果我遗漏了某些内容,或者您​​需要澄清,请告诉我。