我使用celery / rabbitmq访问互联网上的页面。由于有些页面很重,我的内存使用量会有所增加,所以一段时间后芹菜和系统的平均负载会增加太多。
top - load average: 74.91, 128.04, 173.44
Tasks: 3449 total, 88 running, 3353 sleeping, 0 stopped, 8 zombie
%Cpu(s): 4.9 us, 94.8 sy, 0.0 ni, 0.1 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 8175376 total, 8071820 used, 103556 free, 2256 buffers
KiB Swap: 8386556 total, 8386556 used, 0 free. 65620 cached Mem
它命中交换,大多数任务都会超时。所以我想减少进程或工作器的数量,以使内存使用率保持在80%以下。我发现可以动态增长和缩小过程的唯一方法是'--autoscale'选项,但它以相反的方式工作,
autoscaler在有工作要做时会添加更多池进程, 并在工作负载较低时开始删除进程。
那么我可以使用其他任何解决方案吗?我应该自己监控内存使用情况,然后使用celery.app.control方法,如:
Control.pool_shrink(n=1, destination=None, **kwargs)[source]
缩小尺寸?有没有更简单的解决方案呢?