Interstage Application Server チューニングガイド
目次 索引 前ページ次ページ

第7章 JDK/JREのチューニング> 7.2 FJVM

7.2.1 FJVMでサポートされるガーベジコレクション処理

 FJVMでサポートされるガーベジコレクション(GC)処理には、JavaヒープのNew世代領域に対するGC制御方法の違いにより、以下の3種類があります。

■標準GC(シリアルGC)

 New世代領域用GC制御に対して何も付加機能を追加していない「標準機能のみ」で構成されたGC処理です。後述のパラレルGCとの対比から、標準GCのことをシリアルGCと呼ぶ場合もあります。
 Java HotSpot Client VM、実行モードが64ビットモードのJDK/JRE 1.4のFJVM、および図1のオプションを指定した場合のFJVMでは、シリアルGCが実行されます。なお、図1のオプションは、後述のFJGCまたはパラレルGCによるGC制御を無効にするオプションです。

図1 FJVMでシリアルGCを有効にする場合に指定するオプション

JDK/JRE 1.4の場合: -XX:-UseFJGC
JDK/JRE 5.0の場合: -XX:-UseParallelGC

 図2はシリアルGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。

図2 Javaヒープチューニング用オプション(シリアルGC使用時)

-Xms
-Xmx
-XX:NewSize
-XX:MaxNewSize
-XX:NewRatio
-XX:SurvivorRatio
-XX:TargetSurvivorRatio
-XX:PermSize
-XX:MaxPermSize

■New世代領域サイズ自動調整機能付きGC(FJGC)

 New世代領域用GC制御に対し、富士通独自技術による「New世代領域サイズ自動調整機能」を追加して構成されたGC処理です。富士通独自技術によるGC制御を用いていることから、このGCをFJGCと呼ぶ場合もあります。
 実行モードが32ビットモードのJDK/JRE 1.4のFJVMの場合は、デフォルトでこのGC処理が実行されます。
 JDK/JRE 5.0のFJVMの場合は、図3のオプションを指定した場合に、このGC処理が実行されます。

図3 JDK/JRE 5.0のFJVMでNew世代領域サイズ自動調整機能を有効にするオプション

-XX:+UseFJGC

 図4はFJGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。

図4 Javaヒープチューニング用オプション(FJGC使用時)

-Xms
-Xmx
-XX:PermSize
-XX:MaxPermSize

64ビットモードのFJVM

 実行モードが64ビットモードのFJVMでは、New世代領域サイズ自動調整機能を提供していません。実行モードが64ビットモードのFJVMで図3のオプションを指定した場合は、図5のワーニングメッセージが標準エラー出力へ出力され、このオプションの指定は無効になります。

図5 64ビットモード時に-XX:+UseFJGCを指定した際に出力されるメッセージ

warning: -XX:+UseFJGC is not supported in Java HotSpot 64-Bit Server VM.

■New世代領域用制御処理並列化機能付きGC(パラレルGC)

 New世代領域用GC制御に対し、「当該処理を並列化して実行する機能」を追加して構成されたGC処理です。New世代領域用のGC制御を並列化して実行することから、このGCをパラレルGCと呼ぶ場合もあります。
 JDK/JRE 5.0のFJVMの場合は、デフォルトでこのGC処理が実行されます。

 図6はパラレルGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。

図6 Javaヒープチューニング用オプション(パラレルGC使用時)

-Xms
-Xmx
-XX:NewSize
-XX:MaxNewSize
-XX:NewRatio
-XX:PermSize
-XX:MaxPermSize

JDK/JRE 1.4の場合

 JDK/JRE 1.4のFJVMでは、パラレルGCはサポート対象外のGC処理です。

JVMPIとJVMTI

 パラレルGCではJava Virtual Machine Profiling Interface(JVMPI)をサポートしていません(JVMPIは、JDK/JRE 5.0では推奨されていません)。JDK/JRE 5.0でJVMPIが必要となる場合は、GC処理としてシリアルGCを使用してください。
 パラレルGC使用時にJVMPI相当の機能を使用する場合には、JDK/JRE 5.0から導入されたJava Virtual Machine Tool Interface(JVMTI)を使用する必要があります。

GC処理用スレッド数

 パラレルGCを使用した場合は、実行するハードウェアに搭載しているCPU数分のGC処理用スレッドがJavaプロセス内に作成されます。そのため、GC処理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。
 Javaプロセス内でのメモリ量を抑えるためなど、GC処理用スレッドの数を抑制する場合には、図7のオプションでGC処理用スレッドの数を指定することにより、GC処理用スレッドの数を抑制することができます。
 なおGC処理用スレッドの数を抑制した分だけGC処理における性能がおちる場合もありますので、このオプションを用いる場合には、十分な性能確認を実施してください。また、一般的に、CPU数以上の数のGC処理用スレッドを作成しても、GC処理における性能向上にはつながりません。

図7 パラレルGCで使用するGC処理用スレッドの数を指定するオプション

-XX:ParallelGCThreads=GC処理用スレッドの数(0を指定した場合は搭載CPU数)

メモリ割り当てプールの省略値自動調整機能

 FJVMパラレルGCでは、JDK/JRE 5.0のエルゴノミクス機能によるメモリ割り当てプールの初期値(-Xms)および最大値(-Xmx)の省略値自動調整機能(マシンの物理メモリ量などに応じて、-Xmsおよび-Xmxの各オプションに対する省略値を自動的に決定する機能)を無効にしています。
 JDK/JRE 5.0のFJVMで、エルゴノミクス機能によるメモリ割り当てプールの省略値自動調整機能を有効にする場合は、図8のオプションを指定してください。

 ただし、このオプション指定は、システムのメモリ資源不足の要因となる場合があるため、システム内に複数のJavaプロセスを起動、実行する場合には使用しないでください。

図8 JDK/JRE 5.0のFJVMでメモリ割り当てプールの省略値自動調整機能を有効にするオプション

-XX:+AutomaticallyJavaHeapSizeSetting

メモリ領域不足事象の検出機能

 FJVMパラレルGCでは、JDK/JRE 5.0のエルゴノミクス機能によるメモリ領域不足事象の検出機能(図9の各オプション指定値による条件が同時に成立した場合に、メモリ領域不足事象(java.lang.OutOfMemoryError)として検出する機能)を無効にしています。
 JDK/JRE 5.0のFJVMで、エルゴノミクス機能によるメモリ領域不足事象検出機能を有効にする場合は、図10のオプションを指定してください。

 ただし、このオプション指定で検出されるメモリ領域不足事象は、Javaヒープの使用量だけではなく、メモリ領域不足事象検出用オプションで指定された値、およびガーベジコレクション処理の動作状況から得られた統計情報などを元に決定されるため、Javaヒープの使用量が不足していない状態であっても、 メモリ領域不足事象が検出される場合がありますので注意してください。

図9 メモリ領域不足事象検出用オプション

-XX:GCTimeLimit=GC処理に要する時間の上限値 (デフォルトは98)
Javaアプリケーションの合計処理時間に対して、GC処理に要した時間の上限値をパーセント単位(%)で指定します。
指定された上限値を超えた場合、検出条件の一方が成立します。

-XX:GCHeapFreeLimit=GC処理後のJavaヒープ量の空きスペースの下限値 (デフォルトは2)
メモリ割り当てプールの最大値に対する、GC処理後のJavaヒープ量の空きスペースの下限値をパーセント単位(%)で指定します。
指定された下限値を下回った場合、検出条件の一方が成立します。

図10 JDK/JRE 5.0のFJVMでメモリ領域不足事象検出を有効にするオプション

-XX:+UseGCTimeLimit

■デフォルトのGC

 各環境におけるデフォルトのGCを下表に示します。

 

JDK/JRE 1.4

JDK/JRE 5.0

JDK/JREの実行モード

32ビット

64ビット

32ビット

64ビット

VMの種類

Client VM

FJVM

FJVM

Client VM

FJVM

FJVM

デフォルトのGC

シリアルGC

FJGC

シリアルGC

シリアルGC

パラレルGC

パラレルGC

 デフォルトのGCの使用を推奨します。
 通常、デフォルトのGCを変更する必要はありません。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007