Mein Backend-Job arbeitet auf Basis des Cron-Jobs (alle 4 Stunden). Aber er wird beendet, ohne die Daten zu verarbeiten. Das Serverprotokoll wird wie folgt angezeigt:
%Vor%Wie man mit dieser Art von Fehler in meinem Programm umgehen kann
Dieser Fehler wird generiert, wenn App Engine das Back-End herunterfahren muss, das Back-End jedoch nicht innerhalb von 30 Sekunden beendet wird. Einige Gründe, warum dies passieren könnte, finden Sie hier . Abhängig von der Art des Fehlers sendet App Engine Ihrem Back-End möglicherweise eine Benachrichtigung über das bevorstehende Herunterfahren. Daher ist es eine gute Idee, registrieren Sie einen Shutdown-Handler , damit Sie mehr Daten über den Status Ihrer App sammeln können, wenn dies der Fall ist passieren.
Wenn Sie dies regelmäßig sehen, gibt es wahrscheinlich eine systematische Erklärung, z. B. dass der Arbeitsspeicher Ihres Jobs das Maximum der Backend-Klasse überschreitet.
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.
Nachdem wir diesen Fehler seit einiger Zeit verfolgt haben, scheint es, dass sich das AppEngine-Entwicklungsparadigma um URL-Handler mit Zeit- und Speicherbeschränkungen dreht. Dies gilt auch für lange laufende Aufgaben. 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 niemals einmal!
Der Vorteil ist, dass Taskqueues eine bessere Ausfallsicherheit / Übergabe haben als nur ein riesiger Cronjob. Eine fehlgeschlagene Aufgabe bedeutet nicht, dass der Rest der großen Aufgabenliste fehlschlägt.
Tags und Links java google-app-engine cron backend