JVM チューニング - CMS 共通パラメータ、スレッド計算、推奨構成

共通パラメータのリスト

-XX:+UseConcMarkSweatGC

CMS GC コレクターをオンにします。JVM は、1.8 より前ではデフォルトで Parallel GC を使用し、9 以降では G1 GC を使用しました。

-XX:UseParNewGC

CMS コレクターを使用する場合、デフォルトでは、若い世代は複数のスレッドを使用してガベージ コレクションを並行して実行します (UseConcMarkSweatGC が有効な場合、デフォルトで有効になります)。

-XX:+CMSParallelRemarkEnabled

並列マーキングを使用してストールを軽減します (デフォルトでオン)。

-XX:+CMSConcurrentMTEnabled

有効にすると、同時 CMS フェーズが複数のスレッドで実行されます (したがって、複数の GC スレッドがすべてのアプリケーション スレッドと並行して動作します)。(デフォルトで有効)

-XX:ConcGCThreads

同時 CMS プロセスが実行されるスレッドの数を定義します。

-XX:ParallelGCThreads

CMS プロセスによる並列収集のスレッド数を定義します。

-XX:CMSInitiatingOccupancyFraction

この値は旧世代のヒープ領域の使用率を表し、デフォルト値は 68 です。古い世代の使用率がこの値に達すると、パラレル コレクターがガベージ コレクションを開始します。このパラメーターは UseCMSInitiatingOccupancyOnly と併用する必要があり、単独での設定は無効です。

-XX:+UseCMSInitiatingOccupancyOnly

このパラメータを有効にすると、パラメータ CMSInitiatingOccupancyFraction が有効になります。デフォルトでは無効になっています。

-XX:+CMSClassUnloadingEnabled

パラレル コレクターと比較すると、CMS コレクターはデフォルトで永続世代に対してガベージ コレクションを実行しません。永続世代をガベージ コレクションしたい場合は、-XX:+CMSClassUnloadingEnabled を設定できます。デフォルトでは無効になっています。

-XX:+CMSIncrementalMode

CMS コレクターのインクリメンタル モードをオンにします。増分モードでは収集プロセスが長くなりますが、一時停止時間は短くなる傾向があります。デフォルトでは無効になっています。

-XX:CMSFullGCsBeforeCompaction

メモリ空間を圧縮するためにフル GC を実行する回数を設定します。デフォルト値は 0 です。

-XX:+CMSScavengeBeforeRemark

cms gc リマークの前に ygc を実行すると、gc ルートによってスキャンされるオブジェクトの数が減り、リマークの効率が向上します。デフォルトでは無効になっています。

-XX:+ExplicitGCInvokesConcurrent

このパラメータを有効にすると、JVM がシステム GC を呼び出すたびに、フル GC ではなく CMS GC が実行されます。

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

このパラメータにより、システム GC 呼び出しがあるときに、永続世代も CMS ガベージ コレクションの範囲に含まれるようになります。

-XX:+DisableExplicitGC

このパラメータにより、JVM はシステムの GC 呼び出しを完全に無視します (使用されるコレクターのタイプに関係なく)。

-XX:+CompressedOops を使用する

このパラメーターは、クラス オブジェクト データを圧縮してメモリ使用率を向上させるために使用されます。(デフォルトで有効)

-XX:MaxGCPauseMillis=200

このパラメータは、GC 一時停止待機時間をミリ秒単位で設定するために使用されます。設定が低すぎないように注意してください。

CMS のスレッド数の計算式

若い領域の parnew gc スレッドの数と古い領域の cms スレッドの数を区別するには、次の 2 つのパラメータを使用します。

  • -XX:ParallelGCThreads=m // STW が一時停止されているときに使用される GC スレッドの数 (通常は CPU がフル)
  • -XX:ConcGCThreads=n // GC スレッドとビジネス スレッドが同時に実行されるときに使用される GC スレッドの数。通常はこれより少なくなります。

ParallelGCThreads

ParallelGCThreads パラメータのデフォルト値は次のとおりです。

  • CPU コアの数が 8 以下の場合、ParallelGCThreads=CPU コア番号になります。たとえば、私の古いコンピューターは 4 です。
  • CPU コア数 > 8 の場合、ParallelGCThreads = CPU コア数 * 5/8 + 3 切り捨て
  • 16 コアの場合、ParallelGCThreads = 13
  • 32 コアの場合、ParallelGCThreads = 23
  • 64 コアの場合、ParallelGCThreads = 43
  • 72 コアの場合、ParallelGCThreads = 48

ConcGCThreads

ConcGCThreads のデフォルト値は次のとおりです。

ConcGCThreads = (ParallelGCThreads + 3)/4 は切り捨てられます。

  • ParallelGCThreads = 1~4 の場合、ConcGCThreads = 1
  • ParallelGCThreads = 5~8の場合、ConcGCThreads = 2
  • ParallelGCThreads = 13~16 の場合、ConcGCThreads = 4

推奨構成

8C16Gでのパラメータ設定

要約すると、8C16G では次のパラメータ設定を使用することをお勧めします。

-Xmx12g -Xms12g
-XX:ParallelGCThreads=8
-XX:ConcGCThreads=2
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSIncrementalMode
-XX:+CMSScavengeBeforeRemark
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:CMSFullGCsBeforeCompaction=5
-XX:MaxGCPauseMillis=100  // 按业务情况来定
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps

4C8Gでのパラメータ設定

4C8G 構成の場合は推奨されます

-Xmx6g -Xms6g
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=1
// 其他不变。。。。

2C4Gでのパラメータ設定

2C4G 構成の場合は推奨されます

-Xmx3g -Xms3g
-XX:ParallelGCThreads=2
-XX:ConcGCThreads=1
// 其他不变。。。。

おすすめ

転載: blog.csdn.net/agonie201218/article/details/131842634