アプリ・インスタンスが予期したとおりにスケールダウンしないのはなぜですか?

アプリケーションへのトラフィックがスローダウンしてアプリケーションがスケールダウンし始めると、インスタンスが存在しなくなることがなくなります。

着信ワークロードがアプリケーションに対して低速になると、 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.');
      });
    });
    
  • アプリ・インスタンスの詳細を確認して、アプリのトラブルシューティングに役立てます。 アプリ・インスタンスに関する詳細の取得 を参照してください。