JDK 8.x マイクロサービスの起動 JVM パラメーターのチューニングの実践

1.1 JVM 起動パラメータの構成

サーバー構成

ハードウェア リソース
メモリ 6Gi
CPU 4 核
APP_PARAM="-Xmx2g -Xms2g -Xmn768m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:-ResizePLAB -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=200  -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"

1.2 説明

これは、いくつかの Java 仮想マシン (JVM) パラメータを含む変数 APP_PARAM です。これらのパラメータは、Java プログラムの起動時に JVM のさまざまなオプションを構成するために使用されます。これらのパラメータの意味を 1 つずつ説明しましょう。

JVMパラメータ 説明する
-Xmx2g JVM の最大ヒープ メモリを 2GB に設定します。これは、Java ヒープが使用できるメモリの最大量です。
-Xms2g JVM の初期ヒープ メモリを 2GB に設定します。これは Java ヒープの初期メモリ サイズで、JVM の起動時にヒープに割り当てられます。
-Xmn768m JVM の初期の若い世代サイズを 768MB に設定します。若い世代は、新しく作成されたオブジェクトを格納するために使用される Java ヒープ内の領域です。
-XX:MetaspaceSize=256m Metaspace の初期サイズを 256MB に設定します。メタスペースは、クラスのメタデータを保存するために使用されます。
-XX:MaxMetaspaceSize=256m メタスペースの最大サイズを 256MB に設定します。メタスペースがこのサイズに達すると、JVM はガベージ コレクションをトリガーして、使用されなくなったクラス メタデータを再利用します。
-Xss256k 各スレッドのスタック サイズを 256KB に設定します。これにより、各スレッドが使用できるメモリの量が決まります。
-XX:+UseG1GC G1 (ガベージファースト) ガベージ コレクターを使用するように指定します。G1 は、大容量メモリとマルチコア プロセッサを搭載したアプリケーションに適した最新のガベージ コレクターです。
-XX:+AlwaysPreTouch 以降の使用時の遅延を避けるために、JVM の起動時にヒープのすべてのページが事前に割り当てられ、データが設定されるように指定します。
-XX:-ResizePLAB 適応型 Parallel Lab (PLAB) サイズ変更を無効にします。PLAB は、オブジェクト割り当てを最適化するために G1 コレクターで使用される手法です。
-XX:+ParallelRefProcEnabled 並列参照処理を有効にします。これにより、G1 コレクターは参照を処理するときに並列処理を使用できるようになります。
-XX:+ExplicitGCInvokesConcurrent System.gc() が明示的に呼び出されたときに、同時マーキング サイクルと並行してガベージ コレクションを実行できるようにします。
-XX:MaxGCPauseMillis=200 希望する最大 GC 一時停止時間を 200 ミリ秒に設定します。G1 コレクターは、GC 一時停止時間をこの範囲内に維持しようとします。
-XX:ParallelGCThreads=4 並列ガベージ コレクションのスレッド数を 4 に設定します。これにより、並列ガベージ コレクションを実行するときに使用されるスレッドの数が決まります。
-XX:ConcGCThreads=2 同時ガベージ コレクション スレッドの数を 2 に設定します。これにより、同時ガベージ コレクション中に使用されるスレッドの数が決まります。
  • これらの JVM パラメータは、特定のアプリケーションおよびハードウェア環境に応じて調整して、Java プログラムのパフォーマンスとメモリ使用量を最適化できます。
  • 一部のパラメータは、Java バージョンや JVM 実装ごとに異なる効果をもたらす可能性があるため、ケースバイケースでテストとチューニングを行うことをお勧めします。

1.3 JVMパラメータ最適化のアイデア

JVM パラメータの最適化は複雑なプロセスであり、特定のアプリケーションやハードウェア環境に応じて調整する必要があります。

推奨される最適化をいくつか示します。

1.3.1 ヒープメモリサイズの調整

アプリケーションの実際のメモリ要件に応じて、ヒープの最大メモリ-Xmxと初期メモリを適切に増やすことを検討してください-Xmsただし、過剰に割り当てないようにしてください。また、ガベージ コレクションが頻繁に発生するような大きすぎるヒープも避けてください。

1.3.2 若い世代の規模

-Xmn は、若い世代の初期サイズを設定します。アプリケーションのオブジェクト作成頻度とヒープ サイズに応じて、若い世代のサイズを適度に調整します。若い世代が小さいとガベージ コレクションの頻度が高くなる可能性があり、若い世代が大きいとガベージ コレクションの頻度が低くなる可能性があります。

1.3.3 メタスペースのサイズ

-XX:MetaspaceSize-XX:MaxMetaspaceSizeメタスペースの初期サイズと最大サイズを設定しますアプリケーションのクラス読み込み要件に従って、メタスペースのサイズを適度に増やします。

1.3.4 スタックサイズ

-Xss各スレッドのスタック サイズを設定します。アプリケーションのスレッド要件に従ってスタック サイズを適切に調整します。スタック サイズが大きすぎると、使用可能なメモリによってスレッド数が制限される場合があります。

1.3.5 ガベージコレクターの選択

-XX:+UseG1GC特に大規模なメモリとマルチコア プロセッサ環境では、G1 ガベージ コレクタを使用するのが良い選択です。

1.3.6 ガベージコレクションパラメータ

ガベージコレクタのパラメータは、-XX:MaxGCPauseMillis、 、-XX:ParallelGCThreadsなど、実際の状況に応じて調整してください-XX:ConcGCThreadsこれらのパラメータを調整するには、実際のアプリケーション シナリオでのパフォーマンス テストと最適化が必要です。

1.3.7 事前割り当てメモリ

-XX:+AlwaysPreTouch は、JVM の起動時にヒープ メモリを事前に割り当て、後続のメモリ割り当てによって引き起こされる遅延を回避します。

1.3.8 ResizePLAB を無効にする

-XX:-ResizePLABParallel Lab (PLAB) サイジングは無効にすることができます。


  • JVM パラメータを最適化するには、アプリケーションのパフォーマンス要件、ハードウェア環境、および利用可能なメモリ リソースを包括的に考慮する必要があります。
  • 運用環境でテストとパフォーマンス評価を実施し、パラメータを徐々に調整して最高のパフォーマンスとメモリ使用率を達成することをお勧めします。
  • 同時に、過剰な最適化に注意し、過剰なパラメーター調整によって新たな問題が発生しないように注意してください。

2. 一般的に使用される JVM パラメータ

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/hadues/article/details/132018430