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

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

完全没有头绪,怎么排查故障?
3889 次点击
所在节点    Python
15 条回复
zhuangzhuang1988
2016-08-28 08:29:51 +08:00
打日志, 看是不是哪里堵塞了, 网络或者数据库。
Allianzcortex
2016-08-28 08:32:07 +08:00
我猜是 io 问题。。如果是突然出现的话就只能怀疑阿里云了-_-||
goodryb
2016-08-28 18:22:14 +08:00
@Allianzcortex 重启就能恢复,这个不一定是 IAAS 的问题,多从日志分析比较靠谱
fofo
2016-08-28 19:34:30 +08:00
把任务分类用不同的队列,用不同的进程来跑队列(建议 docker )来跑,然后观察日志,查找问题。
kkzxak47
2016-08-28 19:41:13 +08:00
可能真是阿里云 redis 抽风,其实我重启队列就是做重新连接的操作,有时候有效果,有时候没有。
总之在没做任何代码和配置改变的情况下,现在恢复正常了- -
julyclyde
2016-08-29 13:43:35 +08:00
你是不是在用 sentry 啊?
kkzxak47
2016-08-29 21:25:20 +08:00
@julyclyde 没有啊
julyclyde
2016-09-01 11:18:11 +08:00
@kkzxak47 那你的任务里(除了 broker )是不是用到 redis 了?
kkzxak47
2016-09-01 14:46:09 +08:00
@julyclyde 是的,用到了,每个任务都会去确认一个阈值,是存在 redis 里的
kkzxak47
2016-09-01 14:48:52 +08:00
@julyclyde broker 和任务用到的 redis 是独立的实例
julyclyde
2016-09-02 12:18:37 +08:00
@kkzxak47 任务内那个 redis 涉及到 redis 里的哪几个数据类型?是不是有 sorted set 啊?
kkzxak47
2016-09-02 13:30:00 +08:00
@julyclyde 没有,只有一个值,数字
julyclyde
2016-09-02 13:51:32 +08:00
@kkzxak47 那你在任务函数里,分几段打一下时间吧。
写日志:
任务 id 、步骤、耗时

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

我上个月见过 redis 的 sorted set 性能急剧下降导致 celery 总是超时、大量任务积压的情况。这种情况增加 worker 是没用的
kkzxak47
2016-09-02 13:57:54 +08:00
@julyclyde 学习了。想了一下,我们未来可能也有这种危险……
不过这次是一过性的,看阿里云 redis 使用量监控图,上个月除了那天晚上一个凸起,其他时间基本一条直线,我们小应用,队列很少有库存。
johnzh
2016-09-02 22:30:59 +08:00
我猜是 redis

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302213

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX