【问题标题】:Formulas for Optimizing Celery Configurations优化芹菜配置的公式
【发布时间】:2020-09-27 19:48:24
【问题描述】:

我正在尝试找出 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。现在没有更多的 r14s。让我感到困惑的是——我认为 celeries 的默认设置阻止了这些问题,比如它根据处理任务的机器上的内核数量选择并发。

所以 TLDR -

我有 1 个芹菜工人,2 个队列,我知道我正在运行的周期性任务的数量以及总体作业的数量。

根据以上信息,我是否可以使用公式来确定诸如concurrencyredis_max_connectionsbroker_pool_limit 之类的事情以及其他可以消除我目前正在做的事情的大量猜测的优化。

【问题讨论】:

    标签: python django heroku redis celery


    【解决方案1】:

    答案很简单——不。没有一个公式可以用于 Celery 配置选项的所有组合。

    此外,示例的并发设置很大程度上取决于您的任务类型。如果任务是计算密集型的,那么将并发设置为高于 CPU 核心数的任何值都是没有意义的。如果不是,那么您甚至可以乘以 10,具体取决于您的任务使用多少 CPU。

    关于 Redis 最大连接数和代理池限制,您几乎不需要其他任何东西,然而,如果您有数百个工作人员(不是工作进程),那么您可能有连接问题,因此您实际上可能需要调整这些数字。

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多