代码之家  ›  专栏  ›  技术社区  ›  scooz

芹菜胜过豆茎经纪人:任务执行延迟

  •  0
  • scooz  · 技术社区  · 11 年前

    TL;博士:

    我正在排队完成简单的任务 celeryd 通过 beanstalkd 经纪人,使用 task.delay (例如。 myNotifyTask.delay() 而不是 myNotifyTask() ). 尽管延迟值应该是即时的,但执行任务大约需要一个小时(而执行任务只需要几秒钟)。

    根据我的观察,这些任务似乎确实是在 豆状茎 ,但要呆在 ready 在很长一段时间内。尽管设置了 CELERYD_CONCURRENCY = 8 .查看时 豆状茎 的日志,我收到关于的错误 read(): Connection reset by peer ,但任务最终会执行。

    你知道为什么会发生这种情况吗?

    详细信息如下。


    使用豆茎版本1.4.6,芹菜版本3.0.20。

    豆茎日志条目如下所示:

    /usr/bin/beanstalkd: prot.c:709 in check_err: read(): Connection reset by peer
    

    尝试使用时 celery 诊断问题:

    > celery -b "beanstalk://beanstalk_server:11300" status
    Error: No nodes replied within time constraint.
    

    连接到时 豆状茎 通过 telnet ,我明白了 current-jobs-ready: 343 ,这表明工作陷入了困境 准备好的 状态(不是 delayed ). 以下是完整的输出:

    > telnet localhost 11300
    stats
    OK 850
    ---
    current-jobs-urgent: 343
    current-jobs-ready: 343
    current-jobs-reserved: 0
    current-jobs-delayed: 0
    current-jobs-buried: 0
    cmd-put: 2484
    cmd-peek: 0
    cmd-peek-ready: 7
    cmd-peek-delayed: 1
    cmd-peek-buried: 1
    cmd-reserve: 0
    cmd-reserve-with-timeout: 52941
    cmd-delete: 2141
    cmd-release: 0
    cmd-use: 2485
    cmd-watch: 42
    cmd-ignore: 40
    cmd-bury: 0
    cmd-kick: 0
    cmd-touch: 0
    cmd-stats: 497655
    cmd-stats-job: 2141
    cmd-stats-tube: 3
    cmd-list-tubes: 2
    cmd-list-tube-used: 1
    cmd-list-tubes-watched: 52954
    cmd-pause-tube: 0
    job-timeouts: 0
    total-jobs: 2484
    max-job-size: 65535
    current-tubes: 3
    current-connections: 6
    current-producers: 2
    current-workers: 2
    current-waiting: 1
    total-connections: 502958
    pid: 989
    version: 1.4.6
    rusage-utime: 45.778861
    rusage-stime: 56.595537
    uptime: 2489047
    binlog-oldest-index: 0
    binlog-current-index: 0
    binlog-max-size: 10485760
    

    之后不久:

    stats-tube celery
    OK 257
    ---
    name: celery
    current-jobs-urgent: 348
    current-jobs-ready: 348
    current-jobs-reserved: 0
    current-jobs-delayed: 0
    current-jobs-buried: 0
    total-jobs: 2739
    current-using: 3
    current-watching: 1
    current-waiting: 0
    cmd-pause-tube: 0
    pause: 0
    pause-time-left: 0
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   scooz    11 年前

    事实证明,问题是一个芹菜任务的超时时间很长,导致其工作人员等待很长时间。尽管启用了并发,但超时时间太长,任务不断堆积在豆茎中(没有芹菜消耗,因为所有的工作人员最终都会很忙)。