1

私は、メモリ集中型の長期実行タスクのバーストを定期的に処理するGoogle App Engineアプリを持っています。スレッドセーフなモードでPython2.7の実行時にタスクキューAPIを使用しているので、各インスタンスが同時に複数のタスクを処理しています。その結果、私は頻繁にこれらのエラーを取得:App Engineインスタンスごとのタスクリクエストの数を制限する

は、合計8の要求にサービスを提供した後、137.496メガバイトと

超過ソフトのプライベートメモリの上限

はこの要求を処理した後に、この要求を取り扱うプロセスがあまりにも使用されていることがわかった

多くの記憶と終了しました。これにより、アプリケーションへの次の要求に新しいプロセスが使用される可能性があります。このメッセージが頻繁に表示される場合は、アプリケーションでメモリリークが発生する可能性があります。

私が知る限り、各インスタンスはそれぞれ8つのタスクを実行しており、最終的にはソフトメモリの制限にぶつかります。タスクは非常に少量のメモリを使用して開始しますが、最終的には約15-20MBに増加します。

インスタンスに5つ以上のリクエストを割り当てるようにApp Engineに指示する方法はありますか。または、タスクが10分間に20MBのメモリを使用し、それに応じて調整されることが期待されていることをApp Engineに伝えますか?

タスクを処理するインスタンスの数を自動的に拡大する必要があるので、バックエンドAPIを使用しないことをお勧めしますが、これが唯一の方法であれば、その構造を知りたいと思います。

答えて

7

現在のところ、App Engineインフラストラクチャにこれについてアドバイスする方法はありません。あなたが今実行してはいけない場合は、タスクは200以外のステータスコードを返すことができます。その場合、自動的に(別のインスタンスで)再試行されますが、それは多くの解約につながります。おそらくバックエンドが最適なオプションです。

動的バックエンドを設定すると、タスクキュートラフィックに必要なだけスピンアップされます。 backendのURLを 'target'引数として指定することで、バックエンドにタスクを送ることができます。

プルキューを使用すると、タスクの実行をさらに制御できます。その後、選択したバックエンドをスピンアップする(またはプッシュキュータスクを使用する)ことができ、どのような方法でもプルキューからタスクをプルすることができます。

関連する問題