Celery - 最大限度地减少内存消耗

Celery - 最大限度地减少内存消耗

我们在 Ubuntu 10.4 64 位下运行了约 300 个 celeryd 进程,空闲时每个进程占用约 19mb RES、约 174mb VIRT,因此,所有进程在空闲时大约占用 6GB RAM。在活动状态下,进程占用高达 100mb RES 和约 300mb VIRT

每个过程都使用 minidom(xml 文件 < 500kb,结构简单)和 urllib。

问题是 - 我们如何才能减少 RAM 消耗 - 至少对于闲置的工作者来说,一些 celery 或 python 选项可能会有所帮助?如何确定哪一部分占用了大部分内存?

答案1

看一下子类化AutoScaler类并min_concurrency在中设置变量__init__。默认的 min_concurrency 为 0,阻止默认的 AutoScaler 缩小。

我还没有测试过此类(我的 Celery 测试节点已关闭)但类似下面的操作应该可以工作:

from celery.worker.autoscale import Autoscaler
class MinIdleAutoscaler(Autoscaler):
    def __init__(self,pool, max_concurrency, min_concurrency=10, keepalive=30, logger=None):
        Autoscaler.__init__(self,pool,max_concurrency,min_concurrency,keepalive,logger)

然后,您可以通过设置来告诉 Celery 使用此类CELERYD_AUTOSCALER在你的 Celery 配置中。

相关内容