11

質問

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

アプリの概要

  • 定期的なバックグラウンドタスクにセロリを使用するDjangoアプリ
  • Herokuでホスト
  • 設定/celerybeatを介して15分ごとに実行するようにスケジュールされた単一のタスク
  • CloudAMQPアドオンを介して処理されるメッセージング
  • によって実行されるプロセス
    • web: newrelic-admin run-program gunicorn --workers=2 --worker-class=gevent someapp.wsgi:application
    • scheduler: 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

私がこれまでに試したこと

  • エラーとアクティビティの関連付け(ユーザーのアクセスしているアプリ、呼び出されているバックグラウンドタスク、アプリのアイドリングとは相関していないようです)
  • 指がしびれるまでグーグル/検索SO
  • パッケージを最新バージョンにアップグレードする
  • さまざまなレベルのロギング
  • セントリーでの例外キャプチャ(セントリーには表示されません)
  • 開発環境ではローカルでエラーを再現できず、Herokuでの本番環境でのみ再現できます

考えられる関連情報

  • このエラーが最初に発生したのはいつか正確にはわかりません(〜1か月前?)
  • 次の変更に何らかの形で関連している可能性があります(ただし、100%確実ではありませんが、この前にエラーを思い出さないでください)
    • celery==3.0.13celery==3.0.14
    • amqplib->amqp
    • kombu==2.4.8kombu==2.5.4
  • エラーはログにのみ表示されます(New Relicまたはgetsentry.comによって取得されません)
4

1 に答える 1

9

どのくらいの頻度で発生しますか?

あなたの場合、心拍数の監視が正しく機能していない可能性があります。ハートビートのサポートはごく最近導入されたため、バグがある可能性があります。ここではこれを再現できないので、何が起こっているのかを理解するためにさらにデータが必要です。

を設定すると、ハートビートを無効にできますBROKER_HEARTBEAT=0。これがバグの場合、ワーカーは正常に動作するはずですが、接続の切断をすばやく検出することはできません。接続損失を検出できないことは、一部の環境でのみ問題になります(通常は特定のルーター/ファイアウォール構成が原因です)

于 2013-02-12T11:50:18.770 に答える