【问题标题】:celery missed heartbeat (on_node_lost)芹菜错过心跳(on_node_lost)
【发布时间】:2014-02-03 14:47:12
【问题描述】:

我刚刚升级到 celery 3.1,现在我在我的日志中看到了这个 ::

on_node_lost - INFO - missed heartbeat from celery@queue_name for every queue/worker in my cluster.

根据文档,BROKER_HEARTBEAT 默认是关闭的,我没有配置它。

我应该明确设置BROKER_HEARTBEAT=0 还是应该检查其他内容?

【问题讨论】:

  • BROKER_HEARTBEAT=0 不能解决问题
  • 在没有心跳的情况下启动工作人员 (--without-heartbeat) 可以使大量日志静音,但我担心我们可能会掩盖另一个问题

标签: python django celery


【解决方案1】:

看到同样的事情,并注意到日志文件中的一些内容。

1) 在日志开始时有关于时间漂移的消息和偶尔丢失的心跳。

2) 在日志文件的末尾,漂移消息消失了,只存在丢失的心跳消息。

3) 当漂移消息消失时,系统没有任何变化……它们只是不再出现。

我认为漂移本身很可能是问题本身。

在所有涉及的服务器上同步时间后,这些消息就消失了。对于 ubuntu,将 ntpdate 作为 cron 或 ntpd 运行。

【讨论】:

  • 漂移是什么意思?
【解决方案2】:

Celery 3.1 添加了新的混合和八卦程序。我也有很多错过的心跳,并把 --without-gossip 传递给我的工作人员清除了它。

http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#mingle-worker-synchronization http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#gossip-worker-worker-communication

【讨论】:

    【解决方案3】:

    我遇到了类似的问题。我已经找到了原因。

    我有两台服务器来运行 worker。

    当我使用 "ping" 到另一台服务器时, 我发现当 ping 时间大于 2 秒时,日志会显示 "missed heartbeat from celery@"。默认心跳间隔为 2 秒。

    原因是我的网络不好。 http://docs.celeryproject.org/en/latest/internals/reference/celery.worker.heartbeat.html

    【讨论】:

    • 可以修改心跳间隔吗?
    • 是的,celery 有 --heartbeat-interval 参数。--heartbeat-interval
    【解决方案4】:

    启动 celery 时添加 --without-mingle

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2014-10-11
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多