我正在尝试弄清楚芹菜,我接触到的大多数配置都是在我更新设置后进行的猜测和监控作业/性能
一些有趣的观察结果-
我继续看到redis错误ConnectionError('max number of clients reached',)
。当我添加了更多的周期性任务时,就会发生这种情况。令人困惑的是,我的redis计划最多有40个连接。在我的django应用程序中,我将芹菜配置为最多允许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,
}
我最终升级了芹菜、Redis和芹菜节拍,并删除了上述配置。从那以后,我再也没有看到过同样的问题
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了。让我困惑的是——我认为芹菜的默认设置阻止了这些问题,比如它根据处理任务的机器上的内核数量选择并发
因此,TLDR-
我有一个芹菜工人,两个队列,我知道我正在运行的周期性任务的数量和总的作业数量
有了上面的信息,我可以使用一些公式来确定诸如concurrency
、redis_max_connections
、broker_pool_limit
和其他优化,这些优化会让我对当前正在做的事情进行大量猜测
答案很简单-不。没有公式可以用于所有芹菜配置选项的组合
此外,示例的并发设置在很大程度上取决于任务的类型。如果任务是计算密集型的,那么将并发性设置为高于CPU核数的任何值都没有意义。如果不是,那么您甚至可以乘以10,这取决于您的任务使用了多少CPU
Redis max connections和broker pool limit也一样-除了默认值,您几乎不需要其他任何东西,但是,如果您有数百个工作进程(而不是工作进程),那么您可能会遇到连接问题,因此您实际上可能需要调整这些数字
相关问题 更多 >
编程相关推荐