Django Sellerie ConnectionError: Zu viele Herzschläge verpasst

8

Frage

Wie kann ich die ConnectionError: Too many heartbeats missed von Sellerie lösen?

Beispielfehler

%Vor%

App-Übersicht

  • Django App mit Sellerie für regelmäßige Hintergrundaufgaben
  • Auf Heroku gehostet
  • Einzelaufgabe, die alle 15 Minuten über Einstellungen / sellerybeat
  • ausgeführt wird
  • Nachrichten werden über das CloudAMQP-Add-on
  • verarbeitet
  • Prozesse laufen nach
    • 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

Paketversionen

Was ich für relevant halte:

%Vor%

Was ich bisher versucht habe

  • Korrelieren von Fehlern mit Aktivitäten (scheint nicht mit der Besuchs-App des Benutzers zu korrelieren, Hintergrundaufgaben werden aufgerufen, App-Leerlauf)
  • Googeln / Suchen SO, bis meine Finger taub waren
  • Aktualisieren von Paketen auf die neuesten Versionen
  • Verschiedene Protokollebenen
  • Ausnahmeerfassung mit Sentry (erscheint nicht in Sentry)
  • Fehler kann nicht lokal in der Entwicklungsumgebung reproduziert werden, nur in der Produktion auf Heroku

Mögliche relevante Information

  • Ich bin mir nicht sicher, wann genau dieser Fehler zuerst aufgetreten ist (~ vor einem Monat?)
  • Kann in irgendeiner Weise mit den folgenden Änderungen in Verbindung gebracht werden (Fehler vorher nicht erinnern, nicht 100% sicher)
    • celery==3.0.13 bis celery==3.0.14
    • amqplib - & gt; %Code%
    • amqp bis kombu==2.4.8
  • Fehler erscheint nur in Protokollen (wird nicht von New Relic oder getsentry.com abgeholt)
Jeff 11.02.2013, 17:11
quelle

1 Antwort

6

Wie oft passiert es?

Es kann sein, dass die Überwachung des Herzschlags in Ihrem Fall nicht richtig funktioniert. Die Heartbeat-Unterstützung wurde erst kürzlich eingeführt, so dass es Fehler geben kann. Ich kann das hier nicht wiedergeben, also brauche ich mehr Daten, um zu verstehen, was vor sich geht.

Sie können Heartbeats deaktivieren, indem Sie BROKER_HEARTBEAT=0 festlegen. Wenn das ein Fehler ist, sollte der Arbeiter gut laufen, aber es wird nicht möglich sein um eine unterbrochene Verbindung schnell zu erkennen. Verbindungsverlust kann nur nicht erkannt werden ein Problem in einigen Umgebungen (normalerweise verursacht durch spezifische Router / Firewall-Konfigurationen)

    
asksol 12.02.2013, 11:50
quelle