在我的/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),大约有200-300万个这样的任务,但是每个任务运行的时间都不到一秒钟。我看到内存使用激增,因为代理将任务分发给每个工作进程,从而多次复制负载。
我认为问题出在配置中,workers+concurrency+autoscaling的组合是过度的,我想更好地理解这三个选项的作用。
让我们区分worker和worker进程。你生成一个芹菜工人,然后生成许多进程(取决于像
--concurrency
和--autoscale
这样的东西,默认情况是生成与机器核心一样多的进程)。在特定计算机上运行多个工作进程是没有意义的,除非您想进行路由。我建议每台机器只运行一个具有默认进程数的工作进程。这将通过消除工人之间的重复数据来减少内存使用。
如果仍然存在内存问题,请将数据保存到存储区,并仅向工作进程传递一个id。
相关问题 更多 >
编程相关推荐