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

通过设置在最后一次bulletpoint已是(有点)解决--maxtasksperchild为较小的数字(如10)。这确保了10个任务后的重启,之后内存至少回到30MB。芹菜:限制内存使用量(大量的Django安装)

然而,每个celeryd仍然占用了大量的内存,因为工人的最低金额似乎是1,而不是0。我也想像运行python manage.py celery worker不会导致最小的可能占有面积。celeryd,因为即使唯一发生的事情是检查任务,整个堆栈也会被加载。

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

这样的设置可以使用(有点)标准的芹菜配置吗?如果不是,那么有什么扩展点?

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

回答

0

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

根据我的经验,您使用的django芹菜的设计方式非常不同 - 您的所有不同的django项目应该被压缩为几个(或单个)项目,由多个应用。然后,您设置少量队列,以便从不同的应用程序处理芹菜任务 - 这样,只有占用30mb的休眠芹菜线程和队列一样多,并且一个队列可以处理多个任务(如果有多个应用程序,则为if你要)。内存问题应该消失。

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

为什么你需要这么多django安装?如果我错过了某些内容,或者需要澄清,请告诉我。

+0

Ca.每箱50个安装。 Django芹菜的各种安装对应于各种Django安装。 我的场景与“共享主机”并无太大差别(尽管我与自己分享)。即各种Django项目对应于不同的站点(应用程序)。 –

+0

然后我想你需要重新构建,以便芹菜工作与django安装分离 - 也许有一个管理芹菜工作的单个“admin”django项目,这样你只需要几个工作人员同时工作。 –