Container Service for Kubernetes (ACK) クラスタまたは Serverless Kubernetes クラスタにアプリケーションを作成またはデプロイする場合、動的ヒープメモリ最適化機能を有効にして、アプリケーションのメモリ使用量のしきい値に基づいてアプリケーションのヒープメモリ使用量を向上させることができます。動的ヒープメモリ最適化機能は、単一アプリケーションのメモリ使用率を向上させるだけでなく、ACK クラスタの単一ノードにデプロイされるレプリカ数を増やし、Serverless Kubernetes クラスタのレプリカのリソースコストを削減することもできます。このトピックでは、動的ヒープメモリ最適化機能を有効にする方法について説明します。
使用上の注意
次の表は、動的ヒープメモリ最適化機能を有効にする前に注意する必要がある使用上の注意について説明しています。
項目 | 推奨値 | 使用上の注意 |
JDK バージョン | サポートされている JDKバージョン: Dragonwell_11_ElasticHeap | アプリケーションの作成時に Dragonwell_11_ElasticHeap 以外の JDK バージョンを使用している場合、動的ヒープメモリ最適化機能を有効にすることはできません。 アプリケーションの作成後に Dragonwell_11_ElasticHeap を別の JDK バージョンに変更すると、動的ヒープメモリ最適化機能は自動的に無効になります。 |
GC ポリシー | サポートされている GC ポリシー: G1 | アプリケーションの作成時に G1 以外の GC ポリシーを使用している場合、動的ヒープメモリ最適化機能を有効にすることはできません。 アプリケーションの作成後に G1 を別の GC ポリシーに変更すると、動的ヒープメモリ最適化機能は自動的に無効になります。 |
JVM 監視 | ARMS | Application Real-Time Monitoring Service (ARMS) を有効にしていない場合、「ヒープメモリ使用量」や「JVM メモリ使用量トレンド」などのメトリクスは使用できませんが、動的ヒープメモリ最適化機能は影響を受けません。 |
ポッドのモニタリング | Managed Service for Prometheus | Managed Service for Prometheus (Prometheus) を有効にしていない場合、「ヒープメモリ使用量」や「JVM メモリ使用量トレンド」などのメトリクスは使用できませんが、動的ヒープメモリ最適化機能は影響を受けません。 |
最大ヒープメモリ | 設定された最大利用可能ヒープメモリ | 最大利用可能メモリ (Xmx) を設定していない場合、動的ヒープメモリ最適化機能を有効にすることはできません。 |
初期ヒープメモリ | 最大利用可能ヒープメモリ未満 | 初期ヒープメモリが最大利用可能ヒープメモリ以上の場合、Enterprise Distributed Application Service (EDAS) は特定のアルゴリズムに基づいて初期ヒープメモリ (Xms) を最適化します。詳細については、デフォルトパラメータの最適化をご参照ください。 |
アプリケーションの作成時に動的ヒープメモリ最適化を有効にする
にログインします。
左側のナビゲーションペインで、 を選択します。トップナビゲーションバーで、リージョンを選択します。「アプリケーション」ページの上部にある [マイクロサービス名前空間] ドロップダウンリストからマイクロサービス名前空間を選択します。次に、[アプリケーションの作成] ページの左上隅にある [アプリケーションの作成] をクリックします。
[基本情報] ウィザードの [アプリケーションの作成] ステップで、[クラスタタイプ] パラメータと [アプリケーションランタイム環境] パラメータを設定します。
パラメータ
説明
クラスタタイプ
[kubernetes クラスタ] を選択します。
アプリケーションランタイム環境
[java] を選択します。[アプリケーションの選択] セクションで、デプロイ方法を選択します。
[java]: ユニバーサル JAR パッケージを使用してアプリケーションを Dubbo アプリケーションまたは Spring Boot アプリケーションとしてデプロイする場合、このオプションを選択します。このオプションを選択した後、[Java 環境] パラメータを再設定できます。
[tomcat]: ユニバーサル WAR パッケージを使用して Dubbo アプリケーションまたは Spring アプリケーションをデプロイする場合、このオプションを選択します。このオプションを選択した後、[Java 環境] パラメータと [コンテナバージョン] パラメータを再設定できます。
Java 環境
次の Java 環境を選択します。
[dragonwell_11_elasticheap]
[監視およびガバナンスソリューション] セクションで、[統合ソリューション (デフォルト)] を選択し、ページの下部にある [次へ] をクリックします。
[構成] ウィザードの [アプリケーションの作成] ステップで、アプリケーションの環境情報、基本情報、デプロイモード、およびリソースパラメータを設定し、[次へ] をクリックします。
[アプリケーションの作成] ウィザードの [詳細設定] ステップで、[Java 起動パラメータの設定] パラメータの横にある [編集] をクリックします。[java 起動パラメータの編集] ダイアログボックスで、[初期ヒープサイズ] パラメータと [最大ヒープメモリ] パラメータを設定し、[young Generation GC ポリシー] パラメータと [old Generation GC ポリシー] パラメータを [G1] に設定して、[OK] をクリックします。
[動的ヒープメモリ最適化] パラメータをクリックし、[動的ヒープメモリ最適化を有効にするかどうか] をオンまたはオフにします。
アプリケーションの更新時に動的ヒープメモリ最適化を有効にする
にログインします。
左側のナビゲーションペインで、 をクリックします。トップナビゲーションバーで、リージョンを選択します。ページの上部で、名前空間を選択します。[コンテナサービスまたは Serverless Kubernetes クラスタ] を [クラスタタイプ] ドロップダウンリストから選択します。次に、デプロイするアプリケーションを見つけ、アプリケーション名をクリックします。
[概要] ページまたは [基本情報] ページで、右上隅にある を選択します。
[デプロイモードの選択] ページで、デプロイモードを選択し、指定されたデプロイモードセクションの右上隅にある [デプロイの開始] をクリックします。
アプリケーションデプロイ設定ページで、[アプリケーションランタイム環境] パラメーターを設定し、[java環境] パラメーターを [dragonwell_11_elasticheap] に設定してから、デプロイパッケージ情報を設定します。[java起動パラメーターの設定] パラメーターの横にある [編集] をクリックします。[Java起動パラメーターの編集] ダイアログボックスで、[初期ヒープサイズ] パラメーターと [最大ヒープメモリ] パラメーターを設定し、[young世代 GCポリシー] パラメーターと [old世代 GCポリシー] パラメーターを [G1] に設定して、[OK] をクリックします。
[動的ヒープメモリ最適化] パラメータをクリックして、動的メモリ最適化の詳細を表示します。
動的ヒープメモリ最適化のメトリクスとチャート
メトリクス
動的ヒープメモリ最適化機能が有効になっている場合、EDAS は過去 15 分間のアプリケーションのメモリ使用量に基づいて、現在のメモリ使用量関連のメトリクスを計算します。計算式:
過去 15 分間のヒープメモリ使用量 = 過去 15 分間の平均使用済みヒープメモリサイズ / 過去 15 分間の平均使用済みポッドメモリサイズ
過去 15 分間の平均使用済みヒープメモリサイズ = 平均 (過去 15 分間の使用済み JVM ヒープサイズ、1 分あたり 1 データポイント)。
過去 15 分間の平均使用済みポッドメモリサイズ = 平均 (過去 15 分間のアプリケーションポッドの最大使用メモリサイズ)。ステップサイズは 1 分です。
チャート
動的ヒープメモリ最適化のチャートには、アプリケーションのメモリ設定と過去 7 日間のメモリ変化曲線が 표시 され、動的ヒープメモリ最適化機能の有無によるヒープメモリの変化を観察できます。チャートには、次のメトリクスのデータが 표시 されます。
[ポッドメモリ使用量]: 過去 7 日間のポッドのメモリデータ、1 日あたり 1 データポイント。データソース: Prometheus。
[JVM ヒープ]: 過去 7 日間のアプリケーションのヒープメモリ、1 日あたり 1 データポイント。データソース: ARMS。
[JVM Old Generation]: 過去 7 日間の Old Generation のデータ、1 日あたり 1 データポイント。データソース: ARMS。
動的ヒープメモリ最適化パラメータを動的に調整する
デフォルトパラメータの最適化
アプリケーションに Xmx のみを設定した場合、アプリケーションのヒープメモリ最適化機能を有効にすると、EDAS は Xms を自動的に 128 MB に設定します。
アプリケーションに Xmx のみを設定し、Xmx 値が Xms 値と等しい場合、動的ヒープメモリ最適化機能を有効にすると、EDAS は Xms を 128 MB に設定します。
動的ヒープメモリ最適化機能を有効にした後、EDAS は GC ポリシーとして G1 を使用するアプリケーションにパラメータ -XX:G1PeriodicGCInterval を追加し、パラメータの値を 60000 に設定して、Java 仮想マシン (JVM) コレクションポリシーを調整します。
カスタムパラメータの最適化
アプリケーションの動的ヒープメモリ最適化機能を有効にすると、EDAS はアプリケーションのメモリの一部を OS に返します。返されたメモリは、他のプロセスで使用できます。使用プロセス中にアプリケーション用にさらにメモリを予約する場合は、次の表に記載されているパラメータを設定して改善できます。
パラメータ | 説明 | 参照 |
MaxHeapFreeRatio | MaxHeapFreeRatio を設定して、許容されるアイドルヒープメモリの最大比率を制御できます。HotSpot JDK V8、V11、および V17 では、MaxHeapFreeRatio のデフォルト値は 70% です。詳細については、Java ドキュメントをご覧ください。 | カスタム Java 起動パラメータの設定方法については、Java 起動パラメータの設定をご参照ください。 例: -XX:MaxHeapFreeRatio = 80% |
MinHeapFreeRatio | MinHeapFreeRatio を設定して、許容されるアイドルヒープメモリの最小比率を制御できます。HotSpot JDK V8、V11、および V17 では、MinHeapFreeRatio のデフォルト値は 40% です。詳細については、Java ドキュメントをご参照ください。 | カスタム Java 起動パラメータの設定方法については、Java 起動パラメータの設定をご参照ください。 例: -XX:MaxHeapFreeRatio = 50% |
実行結果を表示する
方法 1: アプリケーションの [変更リスト] ページで、アプリケーションの変更の詳細を表示します。[実行ステータス] フィールドに [成功] と 표시 されている場合、アプリケーションはデプロイされ、動的ヒープメモリ最適化機能が有効になります。
方法 2: アプリケーションの [アプリケーションの概要] ページで、[実行ステータス] パラメータの横にあるポッドステータスリンクをクリックします。[ポッド] セクションで、目的のポッドの [ステータス] を確認します。ポッドが実行されていることを示す緑色の丸いアイコンが 표시 されている場合、アプリケーションはデプロイされ、動的ヒープメモリ最適化機能が有効になります。