优化celery 配置的公式

ffdz8vbo  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(459)

我在试着找出celery ,我登陆的大多数配置都来自猜测和更新设置后监视作业/性能。
一些有趣的观察结果-
我一直看到redis的错误 ConnectionError('max number of clients reached',) . 当我添加了更多的周期性任务时,情况就发生了。令人困惑的是,我的redis计划最多有40个连接。在我的django应用程序中,我将celery 配置为最多允许20个redis连接。一些配置可以在下面找到。

CELERY_REDIS_MAX_CONNECTIONS = 20
CELERY_RESULT_EXTENDED = True   

CELERY_BROKER_TRANSPORT_OPTIONS = {
    "fanout_prefix": True,  
    "fanout_patterns": True,    
    "max_connections": 10,  
    "socket_keepalive": True,   
}

我最终升级了celery 、redis和celery beat,并删除了上述配置。从那以后我再也没有见过同样的问题。

celery-redbeat==0.13.0 --> celery-redbeat==1.0.0
celery==4.3.0 --> celery==4.4.4
redis==3.3.11 --> redis==3.5.3

所以在这次升级之后,我的连接错误暂时消失了。我注意到在我的redis示例中,连接的数量几乎减半,从每天平均39个减少到24个。
我要处理的下一个错误是r14错误,我的内存超过了限制。我通过设置 --concurency=4 默认为8。现在没有更多的R14了。让我困惑的是——我认为celery 的默认设置阻止了这些问题,比如它根据处理任务的机器上的内核数选择并发。
所以tldr-
我有1个celery 工人,2个队列,我知道我正在运行的定期任务的数量和总的工作数量。
有了以上信息,有没有公式可以用来判断 concurrency , redis_max_connections , broker_pool_limit 以及其他优化,这将需要我目前正在做的很多猜测。

dw1jzc5e

dw1jzc5e1#

答案很简单-不。没有一个公式可以用于所有celery 配置选项的组合。
此外,示例的并发设置在很大程度上取决于任务的类型。如果任务是计算密集型的,那么将并发性设置为高于cpu核心数的任何值都是没有意义的。如果不是,那么您甚至可以乘以10,这取决于您的任务使用了多少cpu。
关于redis max connections和broker pool limit也是一样的-除了默认值之外,您很少需要其他任何东西,但是,如果您有数百个工作进程(不是工作进程),那么您可能会遇到连接问题,因此您实际上可能需要调整这些数字。

相关问题