在我的/etc/defaults/celeryd
配置文件中,我设置了:
CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"
我知道该守护进程会产生8名芹菜工人,但我完全不确定autoscale
和concurrency
在一起做什么。我认为并发是一种指定工作者可以使用的最大线程数的方法,并且如果需要,自动缩放是工作者扩展和减少子工作者的一种方式。
这些任务的有效载荷很大(大约20-50kB),并且有2-3万个这样的任务,但每个任务在不到一秒的时间内运行。我看到内存使用率飙升,因为代理将任务分配给每个工作人员,因此多次复制有效负载。
我认为问题在于配置,并且工作者+并发+自动缩放的组合过度,我希望更好地理解这三个选项的作用。
答案 0 :(得分:32)
让我们区分工人和工人的过程。你产生一个芹菜工作者,然后产生许多进程(取决于--concurrency
和--autoscale
之类的东西,默认是产生与机器上的核心一样多的进程)。除非您想进行路由,否则在特定计算机上运行多个工作程序是没有意义的。
我建议每台机器只运行1个工作程序,并使用默认的进程数。这将通过消除工作人员之间的数据重复来减少内存使用。
如果仍有内存问题,请将数据保存到商店,并仅将ID传递给工作人员。