共通パラメータのリスト
-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
// 其他不变。。。。