Python中突然遇到的Celery一个奇怪的现象

已经正常工作了快半年的系统,最近突然出现任务大量积压的情况,看日志发现原来只需要 0.02 秒的任务,一个个都变成 15 秒 /30 秒 /45 秒才能执行完,实在太诡异了,时间都是 15 的倍数。然而不论是网络请求或是数据库访问都没有异常,任务倒还是执行成功的。
这时候重启队列又能恢复正常耗时,可是过一段时间又开始变慢。
是用 Django 做的一个应用, redis 做 broker ,所有服务都是阿里云的。

完全没有头绪,怎么排查故障?
Python中突然遇到的Celery一个奇怪的现象

17 回复

打日志, 看是不是哪里堵塞了, 网络或者数据库。


我无法理解你的问题

我猜是 io 问题。。如果是突然出现的话就只能怀疑阿里云了-_-||

重启就能恢复,这个不一定是 IAAS 的问题,多从日志分析比较靠谱

把任务分类用不同的队列,用不同的进程来跑队列(建议 docker )来跑,然后观察日志,查找问题。

可能真是阿里云 redis 抽风,其实我重启队列就是做重新连接的操作,有时候有效果,有时候没有。
总之在没做任何代码和配置改变的情况下,现在恢复正常了- -

你是不是在用 sentry 啊?

没有啊

那你的任务里(除了 broker )是不是用到 redis 了?

是的,用到了,每个任务都会去确认一个阈值,是存在 redis 里的

broker 和任务用到的 redis 是独立的实例

任务内那个 redis 涉及到 redis 里的哪几个数据类型?是不是有 sorted set 啊?

没有,只有一个值,数字

那你在任务函数里,分几段打一下时间吧。
写日志:
任务 id 、步骤、耗时

然后横竖统计一下就知道慢在哪个段里了

我上个月见过 redis 的 sorted set 性能急剧下降导致 celery 总是超时、大量任务积压的情况。这种情况增加 worker 是没用的

学习了。想了一下,我们未来可能也有这种危险……
不过这次是一过性的,看阿里云 redis 使用量监控图,上个月除了那天晚上一个凸起,其他时间基本一条直线,我们小应用,队列很少有库存。

我猜是 redis

2024 年了,遇到类似的问题,不用动 redis ,重启下任务进程就好了,不明所以

回到顶部