2012-10-05 3 views
8

Mein Backend-Job arbeitet auf Basis des Cronjobs (alle 4 Stunden). Aber er wird beendet, ohne die Daten zu verarbeiten. Die Server-Protokoll zeigt, wie folgend:GAE: Prozess beendet, weil das Backend zu lange dauerte, um in Backends herunterzufahren.

500 15377121ms 0kb instance=0 AppEngine-Google; (+http://code.google.com/appengine) 
E 2012-10-05 01:50:18.044 Process terminated because the backend took too long to shutdown. 

Wie diese Art von Fehler in meinem Programm zu handhaben

Antwort

5

Dieser Fehler wird generiert, wenn App Engine benötigt Ihr Backend herunterzufahren, aber das Backend nicht innerhalb von 30 Sekunden beenden . Einige Gründe, warum dies passieren könnte, sind aufgeführt here. Je nach Art des Fehlers sendet App Engine Ihrem Back-End eine Benachrichtigung über das bevorstehende Herunterfahren. Daher ist es eine gute Idee, register a shutdown handler, damit Sie mehr Daten über den Zustand Ihrer App sammeln können, wenn dies geschieht.

Wenn Sie dies regelmäßig sehen, gibt es wahrscheinlich eine systematische Erklärung, z. B. dass der Arbeitsspeicher Ihres Jobs das Maximum für die Backend-Klasse überschreitet.

+0

Das Hinzufügen des Sutdown-Handlers hat in meiner App nicht geholfen. Ich benutze python2.7 webapp mit einem Backend. Appengine zeigt diese Nachricht in 95% der Fälle in den Protokollen an. Der Handler wurde in der letzten Woche nur 2-4 Mal aufgerufen. Wenn es aufgerufen wurde, hat das Backend funktioniert, um zu beenden. Die Speicher- und Prozessorauslastung wird in Grenzen angezeigt. Shutdown-Handler werden nicht garantiert wie von einem Google io Talk auf Backends aufgerufen werden. –

0

Umgang mit dem gleichen Problem. Blick auf die Ursachen in den offiziellen Dokumenten aufgelistet. Speicherverbrauch scheint aus Statistiken ok. Probleme mit Datenspeicherkonflikten werden auch in meinem Code behandelt. Timeouts auch. Es scheint der einzige Ausweg zu sein, den Task-Mechanismus so zu ändern, dass er in wiederherstellbaren Blöcken arbeitet.

Nach diesem Fehler für einige Zeit jagt jetzt, so scheint es AppEngine Entwicklungsparadigma mit Einschränkungen auf Zeit um URL-Handler dreht, Speicher usw. Dies ist für lange laufende Aufgaben zu. Ich habe meine Langzeitaufgabe neu gemacht, um kleine Aufgaben auszuführen. Aufgabenwarteschlangen haben kleinere Aufgaben ausgelöst, die erneut ausgeführt werden, bevor die nächste Aufgabe beendet wird. Scheiterte nie einmal!

Der Vorteil ist, dass Taskqueues bessere Failsafe/Handover als nur einen großen Cron Job haben. Eine fehlgeschlagene Aufgabe bedeutet nicht, dass der Rest der großen Aufgabenliste fehlschlägt.