RT, 在线上用 Celery 4,执行一定数量的任务之后就假死,但是每次数量和时间不定。
broker 是 redis,redis 版本是 4.0.1 和 4.1.2 都试过,都会假死。
1
mringg 2017-08-01 23:18:06 +08:00 via iPhone
检查日志,看看有没有什么错误信息
|
2
herozem OP @mringg 没开 debug,只开了 info,然后日志突然卡住不再输出,也没有看到什么异常的消息。上 celery flower 看,worker 的状态是 offline
|
3
rogwan 2017-08-01 23:34:42 +08:00 via Android
定时任务吗?还是只是异步?
|
5
111111111111 2017-08-02 01:01:28 +08:00
常常遇到。暂时采用 worker 定时重启的方式解决
|
6
rogwan 2017-08-02 07:56:11 +08:00 via Android
如果使用了自动持续集成,最好在不影响用户使用的时间段,重启一下服务器。否则是容易出现队列假死的情况。
|
7
KgM4gLtF0shViDH3 2017-08-02 08:24:54 +08:00
握草,积累了一百多万,做分布式了嘛
|
8
L2AKnG8GXx60bc6P 2017-08-02 09:53:55 +08:00 via iPhone
换 rq 吧
|
9
herozem OP @111111111111 我也是 :joy:
|
13
eloah 2017-08-02 10:26:59 +08:00
4.0.2, broker 是 redis.
我遇到的坑是 celery 的任务流使用 SUBSCRIBE,有时会在一条命令里订阅超多的 task,阻塞 redis 导致超时......翻了 N 久源代码也没解决......而且是随机出现的,超级难复现...... 解决方法是让运维关掉这台机器的 redis 报警 Doge |
15
dozer47528 2017-08-02 10:56:27 +08:00
遇到过,也是 redis。Redis 报警,too many new connections,celery 不断的重连 redis,慢慢地到最后就直接连不上了。
之前是大批量异步任务,QPS 非常高。后来改成批量发送,QPS 变小,目前没遇到过。 不清楚是累积到一定量会出现还是 QPS 大于一定值会出现。 |
16
mringg 2017-08-02 11:32:29 +08:00
直接用 mq 自己裸写代码吧
|
17
MarcoQin 2017-08-02 12:23:27 +08:00
我之前用 celery 做爬虫的时候也经常这样……
|
18
L2AKnG8GXx60bc6P 2017-08-02 22:38:11 +08:00 via iPhone
@herozem rq 简单啊,有问题追源码就好了,我们的项目就用 rq 替换掉了了 celery,不过那是因为和 gevent 不兼容
|
19
julyclyde 2017-08-03 09:48:36 +08:00
去年遇到过,不过检查发现不是 celery 的问题,而是执行的那个异步任务本身卡死了
|
20
fkdtz 2017-09-02 20:10:35 +08:00
我这边不时遇到某个 worker 不再执行任务,而其他 worker 会报出一个“ missed heartbeat from xxxworker ”的 log 出来。
查了资料好像是该 worker 处于 offline 状态导致的,但不知道为什么该 worker 会 offline。感觉 celery 东西好多啊,用着有点难。 |
21
qq7171891 2018-10-12 11:51:00 +08:00
版本 4.2,有定时任务 beat,用的 Redis,broker 和任务返回存储都是。
beat 一切都好,Worker Received task 执行到一定时间(目前有过 2 天、过 3 天不定)就停掉了,没有任何错误信息,就是日志就停止了。查程序也发现不执行了。但是 beat 一切都好,还在发布任务。 哎,不知道从何查起。 |