【发布时间】: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 个队列,我知道我正在运行的周期性任务的数量以及总体作业的数量。
根据以上信息,我是否可以使用公式来确定诸如concurrency、redis_max_connections、broker_pool_limit 之类的事情以及其他可以消除我目前正在做的事情的大量猜测的优化。
【问题讨论】:
标签: python django heroku redis celery