アプリ・インスタンスが予期したとおりにスケールダウンしないのはなぜですか?
アプリケーションへのトラフィックがスローダウンしてアプリケーションがスケールダウンし始めると、インスタンスが存在しなくなることがなくなります。
着信ワークロードがアプリケーションに対して低速になると、 Code Engine は、構成されているスケーリング値に基づいてアプリケーションの自動的なスケールダウンを開始します。 Code Engine は、SIGTERM メッセージをアプリケーションに送信します。 コードは、このシグナルに反応してシャットダウンする必要があります。 コードが SIGTERM メッセージを処理しない場合、構成された要求タイムアウト値 (デフォルト: 300 秒) の間、アプリケーション・インスタンスは
Terminating 状況のままになります。
以下のいずれかの解決策を試してください。
-
スケーリングの仕組みに関する資料を確認してください。 アプリケーションのスケーリングの構成を参照してください。
-
アプリケーションの自動スケーリング用に構成された値を確認します。
- コンソールから、アプリケーションのページに移動します。 自動スケーリングの設定は、 「構成」>「ランタイム」 タブにあります。
- CLI で
ibmcloud ce app getコマンドを実行して、アプリの詳細を表示します。
-
コードが SIGTERM メッセージを処理することを確認してください。 アプリケーションをクリーンにスケールダウンするには、アプリケーション・コードで SIGTERM シグナルを処理する必要があります。 Code Engine が自動的にスケールダウンすると、SIGTERM シグナルがアプリケーションに送信されます。
以下のコード例では、SIGTERM メッセージを処理します。これは、アプリケーションがインスタンス終了のシグナルを受信した後に、アプリケーションによって開始された HTTP サーバーへの接続を閉じるためです。
const server = // start the HTTP server process.on('SIGTERM', () => { console.info('SIGTERM signal received.'); server.close(() => { console.log('Http server closed.'); }); }); -
アプリ・インスタンスの詳細を確認して、アプリのトラブルシューティングに役立てます。 アプリ・インスタンスに関する詳細の取得 を参照してください。