python - Django celery 连接错误 : Too many heartbeats missed

标签 python django heroku celery django-celery

问题

如何解决来自 Celery 的 ConnectionError: Too many heartbeats missed

示例错误

[2013-02-11 15:15:38,513: ERROR/MainProcess] Error in timer: ConnectionError('Too many heartbeats missed', None, None, None, '')
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 97, in apply_entry
    entry()
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 51, in __call__
    return self.fun(*self.args, **self.kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 153, in _reschedules
    return fun(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 265, in heartbeat_check
    return self.transport.heartbeat_check(self.connection, rate=rate)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 134, in heartbeat_check
    return connection.heartbeat_tick(rate=rate)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/connection.py", line 837, in heartbeat_tick
    raise ConnectionError('Too many heartbeats missed')
ConnectionError: Too many heartbeats missed

应用概览

  • 使用 celery 执行周期性后台任务的 Django 应用
  • 托管在 Heroku 上
  • 通过设置/celerybeat 计划每 15 分钟运行一次的单个任务
  • 通过 CloudAMQP 插件处理消息
  • 运行的进程
    • web: newrelic-admin run-program gunicorn --workers=2 --worker-class=gevent someapp.wsgi:application
    • 调度程序:newrelic-admin run-program python manage.py celery worker -B -E --maxtasksperchild=1000 --loglevel=WARNING

包版本

我认为相关的内容:

Django==1.4.3
amqp==1.0.8
billiard==2.7.3.20
celery==3.0.14
gevent==0.13.8
greenlet==0.4.0
kombu==2.5.6
raven==3.1.10

到目前为止我尝试了什么

  • 将错误与事件相关联(似乎与用户访问的应用程序、正在调用的后台任务、应用程序闲置无关)
  • 谷歌搜索/搜索直到我的手指 NumPy
  • 将软件包升级到最新版本
  • 各种级别的日志记录
  • 用哨兵捕获异常(不出现在哨兵中)
  • 无法在开发环境下本地重现错误,只能在 Heroku 上生产

可能的相关信息

  • 我不确定这个错误第一次出现的确切时间(大约一个月前?)
  • 可能以某种方式与以下更改相关(不要记忆起之前的错误,虽然不是 100% 确定)
    • celery==3.0.13celery==3.0.14
    • amqplib -> amqp
    • kombu==2.4.8kombu==2.5.4
  • 错误只出现在日志中(不会被 New Relic 或 getsentry.com 发现)

最佳答案

它多久发生一次?

您的情况可能是心跳监控没有正常工作。 心跳支持是最近引入的,因此可能存在错误。 我无法在此处重现此内容,因此我需要更多数据来了解正在发生的事情。

您可以通过设置 BROKER_HEARTBEAT=0 来禁用心跳。 如果这是一个错误,那么工作人员应该可以正常运行,但它将无法 快速检测断开的连接。无法检测到连接丢失只是 某些环境中的问题(通常由特定的路由器/防火墙配置引起)

关于python - Django celery 连接错误 : Too many heartbeats missed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817181/

相关文章:

python - 如何使用特定格式在 Django 模板上获取本地化日期?

python - Gunicorn 上的 Django 服务 POST 请求作为 GET 接收?

python - 使用 Python 的 MRjob 生成前 10 个值的 MapReduce 作业

python - 使用 Python 通过 GPIO 对 Raspberry Pi 进行 LED 控制

python - 如果字典中存在特定键项,如何获取列表中字典的索引

Heroku Rails 5 加载错误 : Could not load the 'listen' gem

python - tornado.database 导入错误 : No module named database

python - 使用 python simple-salesforce 访问 salesforce 元数据

python - Django 服务器未正确启动似乎是 mysql 问题。

ruby-on-rails - NoMethodError(Heroku 的 Logger 未定义方法 `flush'