V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
herozem
V2EX  ›  问与答

你们有没有遇到过 Celery 假死

  •  
  •   herozem · 2017-08-01 23:13:04 +08:00 · 7725 次点击
    这是一个创建于 2431 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT, 在线上用 Celery 4,执行一定数量的任务之后就假死,但是每次数量和时间不定。

    broker 是 redis,redis 版本是 4.0.1 和 4.1.2 都试过,都会假死。

    21 条回复    2018-10-12 11:51:00 +08:00
    mringg
        1
    mringg  
       2017-08-01 23:18:06 +08:00 via iPhone
    检查日志,看看有没有什么错误信息
    herozem
        2
    herozem  
    OP
       2017-08-01 23:33:18 +08:00
    @mringg 没开 debug,只开了 info,然后日志突然卡住不再输出,也没有看到什么异常的消息。上 celery flower 看,worker 的状态是 offline
    rogwan
        3
    rogwan  
       2017-08-01 23:34:42 +08:00 via Android
    定时任务吗?还是只是异步?
    herozem
        4
    herozem  
    OP
       2017-08-02 00:58:30 +08:00
    @rogwan 只是异步任务。几天没看,结果累积了一百多万任务没执行
    111111111111
        5
    111111111111  
       2017-08-02 01:01:28 +08:00
    常常遇到。暂时采用 worker 定时重启的方式解决
    rogwan
        6
    rogwan  
       2017-08-02 07:56:11 +08:00 via Android
    如果使用了自动持续集成,最好在不影响用户使用的时间段,重启一下服务器。否则是容易出现队列假死的情况。
    bestkayle
        7
    bestkayle  
       2017-08-02 08:24:54 +08:00
    握草,积累了一百多万,做分布式了嘛
    relic
        8
    relic  
       2017-08-02 09:53:55 +08:00 via iPhone
    换 rq 吧
    herozem
        9
    herozem  
    OP
       2017-08-02 09:54:00 +08:00
    @111111111111 我也是 :joy:
    herozem
        10
    herozem  
    OP
       2017-08-02 09:57:25 +08:00
    @rogwan 嗯,现在跑一段时间就要重启一次,已经快要顾不上用户体验了...
    herozem
        11
    herozem  
    OP
       2017-08-02 09:57:45 +08:00
    @bestkayle celery 有,但是 broker 没
    herozem
        12
    herozem  
    OP
       2017-08-02 09:58:11 +08:00
    @relic 说不定又是一个坑,BTW,rq 有实际体验可以分享分享吗?
    eloah
        13
    eloah  
       2017-08-02 10:26:59 +08:00
    4.0.2, broker 是 redis.
    我遇到的坑是 celery 的任务流使用 SUBSCRIBE,有时会在一条命令里订阅超多的 task,阻塞 redis 导致超时......翻了 N 久源代码也没解决......而且是随机出现的,超级难复现......
    解决方法是让运维关掉这台机器的 redis 报警
    Doge
    herozem
        14
    herozem  
    OP
       2017-08-02 10:53:09 +08:00
    @eloah 有道理 :joy:
    dozer47528
        15
    dozer47528  
       2017-08-02 10:56:27 +08:00
    遇到过,也是 redis。Redis 报警,too many new connections,celery 不断的重连 redis,慢慢地到最后就直接连不上了。
    之前是大批量异步任务,QPS 非常高。后来改成批量发送,QPS 变小,目前没遇到过。

    不清楚是累积到一定量会出现还是 QPS 大于一定值会出现。
    mringg
        16
    mringg  
       2017-08-02 11:32:29 +08:00
    直接用 mq 自己裸写代码吧
    MarcoQin
        17
    MarcoQin  
       2017-08-02 12:23:27 +08:00
    我之前用 celery 做爬虫的时候也经常这样……
    relic
        18
    relic  
       2017-08-02 22:38:11 +08:00 via iPhone
    @herozem rq 简单啊,有问题追源码就好了,我们的项目就用 rq 替换掉了了 celery,不过那是因为和 gevent 不兼容
    julyclyde
        19
    julyclyde  
       2017-08-03 09:48:36 +08:00
    去年遇到过,不过检查发现不是 celery 的问题,而是执行的那个异步任务本身卡死了
    fkdtz
        20
    fkdtz  
       2017-09-02 20:10:35 +08:00
    我这边不时遇到某个 worker 不再执行任务,而其他 worker 会报出一个“ missed heartbeat from xxxworker ”的 log 出来。
    查了资料好像是该 worker 处于 offline 状态导致的,但不知道为什么该 worker 会 offline。感觉 celery 东西好多啊,用着有点难。
    qq7171891
        21
    qq7171891  
       2018-10-12 11:51:00 +08:00
    版本 4.2,有定时任务 beat,用的 Redis,broker 和任务返回存储都是。
    beat 一切都好,Worker Received task 执行到一定时间(目前有过 2 天、过 3 天不定)就停掉了,没有任何错误信息,就是日志就停止了。查程序也发现不执行了。但是 beat 一切都好,还在发布任务。

    哎,不知道从何查起。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1148 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:59 · PVG 06:59 · LAX 15:59 · JFK 18:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.