ページの先頭行へ戻る
Interstage Application Server V12.0.0 チューニングガイド
FUJITSU Software

Enterprise Edition9.2.4 コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパラレルGC

New世代領域用GC制御を並列化して実行する機能、およびJavaアプリケーションと同時並列に動作するOld世代領域・Permanent世代領域用GC制御「コンカレント・マーク・スイープGC(CMS-GC)機能」を追加して構成されたGC処理です。CMS-GC機能を追加されたパラレルGC制御であることから、このGCをCMS付きパラレルGCと呼ぶ場合もあります。

CMS付きパラレルGCによるGC制御は、以下のエディションに搭載されたJDK/JRE にだけ提供しています。

CMS-GCは、JavaアプリケーションがFull GCによって停止されることにより影響を受ける「アプリケーションの応答性能の平準化」を改善するために実行される「Old世代領域内およびPermanent世代領域内の不要オブジェクト回収用のGC機構」です。

Javaアプリケーションを停止させて実行するFull GCに対し、CMS-GCはJavaアプリケーションと同時並列に動作し、Old世代領域内およびPermanent世代領域内の不要オブジェクトを回収します。CMS-GCの実行により、Old世代領域(New世代領域にあるオブジェクトの移動先や巨大オブジェクトの生成先となる領域) およびPermanent世代領域(Javaのクラス、メソッドや定数などの格納先となる領域)の空きを、Javaアプリケーション動作と並行して増加させることができるため、Full GCの発生を抑えることができます。これにより、JavaアプリケーションはFull GCにより停止される影響を受けにくくなり、応答性能平準化の改善が期待できます。

なおCMS-GC動作中は、NewGC処理/Full GC処理の実行開始が遅延する場合があります。そして遅延期間中は、Javaアプリケーションとしての動作も停止します。そのため、ガーベジコレクション処理の結果ログ内のNewGC処理/Full GC処理に対して出力されたGC処理実行時間よりも長い間、Javaアプリケーションとしての動作が停止している場合があります。

CMS付きパラレルGCを有効に場合に指定するオプション

-XX:UseFJcmsGC=タイプ

タイプ:

CMS-GCによる不要オブジェクトの回収対象を「Old世代領域内」とする場合

  • type0

  • type1

  • type2

CMS-GCによる不要オブジェクトの回収対象を「Old世代領域内およびPermanent世代領域内」とする場合

  • type0p

  • type1p

  • type2p

CMS-GCによる不要オブジェクトの回収対象を、Old世代領域内だけでなくPermanent世代領域内にまで拡大した場合、CMS-GCとしての処理対象域が増加することになるため、CMS-GC完了までの実行時間増加に繋がり易くなります。

その結果、実行するアプリケーションや実行環境によっては、CMS-GCによる回収処理が間に合わなくなり、FullGCの発生に繋がる場合もありえます。

そのため、回収対象が「Old世代領域内」で正常動作していた環境において、回収対象を「Old世代領域内およびPermanent世代領域内」にまで拡大する場合は、再度のチューニング作業が必要となります.

GC処理用スレッド数

CMS付きパラレルGCを使用した場合は、実行するハードウェアに搭載しているCPU数に依存した数のGC処理用スレッドがJavaプロセス内に作成されます。そのため、GC処理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。

Javaプロセス内でのメモリ量を抑えるためなど、GC処理用スレッドの数を調整する場合には、以下のオプションでGC処理用スレッドの数を指定することにより、GC処理用スレッドの数を調整することができます。

なおGC処理用スレッドの数を抑制した分だけGC処理における性能がおちる場合もありますので、このオプションを用いる場合には、十分な性能確認を実施してください。また、一般的に、CPU数以上の数のGC処理用スレッドを作成しても、GC処理における性能向上にはつながりません。

CMS-GC処理用スレッド数

CMS付きパラレルGCを使用した場合は、以下のCMS-GC処理用スレッドがJavaプロセス内に作成されます。そのため、CMS-GC処理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。

CMSスレッドの他、CMS-GC処理の中のコンカレント・マーク処理を複数スレッドで並列化して実行するために、コンカレント・マーク処理専用スレッドを追加で作成することができます。以下のオプションでCMS-GC処理用スレッドの数を指定することにより、CMS-GC処理用スレッドの数を調整することができます。

なお一般的に、CPU数以上の数のCMS-GC処理用スレッドを作成しても、CMS-GC処理における性能向上にはつながりません。