herozem
V2EX  ›  问与答

你们有没有遇到过 Celery 假死

  •  
  •   herozem · Aug 1, 2017 · 8506 views
    This topic created in 3206 days ago, the information mentioned may be changed or developed.

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

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

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

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

    哎,不知道从何查起。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5641 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 07:51 · PVG 15:51 · LAX 00:51 · JFK 03:51
    ♥ Do have faith in what you're doing.