8

私のバックエンドジョブはcronジョブに基づいて動作しています(4時間ごと)が、データを処理せずに終了します。サーバーログは次のように表示されます。

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.

私のプログラムでこの種のエラーを処理する方法

4

2 に答える 2

5

このエラーは、App Engineがバックエンドをシャットダウンする必要があるが、バックエンドが30秒以内に終了しない場合に生成されます。これが発生する可能性のあるいくつかの理由をここに示します。エラーの種類によっては、App Engineがバックエンドにシャットダウンの通知を送信する場合があるため、シャットダウンハンドラーを登録して、これが発生しようとしているときにアプリの状態に関するより多くのデータを収集できるようにすることをお勧めします。

これを定期的に確認している場合は、ジョブのメモリがバックエンドのクラスの最大値を超えているなど、体系的な説明がある可能性があります。

于 2012-10-05T05:11:23.397 に答える
0

同じ問題に対処します。公式ドキュメントに記載されている原因を調べました。統計から、メモリ消費は問題ないようです。データストアの競合の問題も私のコードで処理されます。タイムアウトも。回復可能なチャンクで機能するようにタスクメカニズムを変更することが唯一の方法のようです。

しばらくの間このエラーを追跡した後、AppEngine開発パラダイムは時間やメモリなどに制限のあるURLハンドラーを中心に展開しているようです。これは長時間実行されるタスクにも当てはまります。長期的なタスクをやり直して、小さなタスクを実行しました。タスクキューは、次のタスクのキューを終了する前に、実行される小さなタスクをトリガーしました。一度も失敗することはありません!

利点は、taskqueuusが単なる巨大なcronジョブよりも優れたフェイルセーフ/ハンドオーバーを備えていることです。1つのタスクが失敗しても、残りの巨大なタスクリストが失敗するわけではありません。

于 2013-12-01T16:22:03.590 に答える