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

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

7.2.2 New世代領域サイズ自動調整機能

 ここでは、FJVMで実装しているNew世代領域サイズ自動調整機能について説明します。

 なお、実行モードが64ビットモードのFJVMは、New世代領域サイズ自動調整機能を提供していません。

JDK/JRE 1.4のFJVM

 JDK/JRE 1.4のFJVMにおけるデフォルトのGC処理は、FJGC(実行モードが32ビットモードの場合)またはシリアルGC(実行モードが64ビットモードの場合)です。

JDK/JRE 5.0のFJVM

JDK/JRE 5.0のFJVMにおけるデフォルトのGC処理は、パラレルGCです。

■New世代領域サイズ自動調整機能

 FJVMでは、富士通独自技術により、JavaヒープのNew世代領域のサイズを自動的に調整および最適化する機能を実装しています。この機能を、New世代領域サイズ自動調整機能(以降、自動調整機能と略する)といいます。

■New世代領域サイズ自動調整機能が有効となる条件

 自動調整機能は、“メモリ割り当てプールの最大サイズ”が図1に示す値の範囲内である場合に有効となります。(“メモリ割り当てプールの最大サイズ”は、“-Xmx”オプションで指定できます。)
 “メモリ割り当てプールの最大サイズ”が図1で示す範囲よりも大きな値である場合は、FJVM起動時に図2のメッセージが標準出力へ出力され、自動調整機能は停止状態となります。
 自動調整機能が停止状態となった場合は、New世代領域の大きさに対する自動調整処理は行なわれず、表1の注1で示すオプションに関する制御処理を除き、シリアルGCでの制御処理と同じ処理方法でNew世代領域の大きさが制御されるようになります。

図1 自動調整機能が有効となるメモリ割り当てプールの最大サイズ

【Windows(R) 2000の場合】
JDK/JRE 1.4: 920MB以下
JDK/JRE 5.0: 900MB以下

【Windows Server(R) 2003、Windows Server(R) 2008、Windows(R) XPまたはWindows Vista(R)の場合】
JDK/JRE 1.4: 700MB以下(ただし、Windows Server(R) 2008を除く)
JDK/JRE 5.0: 700MB以下


JDK/JRE 1.4: 2340MB以下
JDK/JRE 5.0: 2250MB以下


JDK/JRE 1.4: 1600MB以下
JDK/JRE 5.0: 1500MB以下

図2 自動調整機能停止時に出力されるメッセージ

Heap too large for dynamic eden: using static eden

■New世代領域サイズ自動調整機能で無効となるオプション

 自動調整機能が有効な場合、New世代領域の大きさに関する値が自動的に調整・最適化されるため、表1の各オプションへの指定値は無効となります。
 なお、実行モードが64ビットモードのFJVMでは自動調整機能を提供していないため、Java HotSpot Server VMと同様、表1の各オプションへの指定値は有効となります。

表1 自動調整機能で無効となるオプション

オプション

オプションの機能

-XX:NewSize

New世代領域のヒープサイズを指定します。

-XX:MaxNewSize

New世代領域の最大ヒープサイズを設定します。

-XX:NewRatio

New世代領域とOld世代領域のサイズ比率を指定します。

-XX:SurvivorRatio (注1) (注2)

New世代領域を構成するEden領域とSurvivor領域のサイズ比率を指定します。

-XX:TargetSurvivorRatio (注1)

GC処理後の生存オブジェクトがSurvivor領域を占める割合を、指定したパーセンテージ値に調整します。

注1) 図1で示す範囲よりも大きな値を“-Xmx”オプションで指定して自動調整機能が停止した場合でも、このオプションへの指定値は無効となります。
注2) パラレルGCの場合は、このオプションへの指定値は無効となります。

■New世代領域サイズ自動調整機能の無効化

 自動調整機能は図3のオプションを指定することで無効にすることができます。

図3 自動調整機能を無効にするオプション

-XX:-UseFJGC

 JDK/JRE 1.4のFJVMを使用している場合で、かつ以下のような場合には、自動調整機能を無効にし、シリアルGCを使用してください。

 また、JDK/JRE 5.0のFJVMで自動調整機能を有効にしている場合で、かつ以下のような場合には、自動調整機能を有効にするオプションを削除し、パラレルGCまたはシリアルGCを使用してください。

■補足

 ユーザ空間内で使用できるメモリ量には、システムごとに異なる上限値があります。

 そして、Javaアプリケーションを実行する場合には、Javaヒープ(“-Xmx”オプションで指定するメモリ割り当てプールなど)のほかに、Javaアプリケーション自身、Java VM、そしてネイティブモジュールが動作するために使用するメモリ領域も必要です。

 そのため、ユーザ空間内で使用できるメモリ量の上限から、Javaアプリケーション自身、Java VM、そしてネイティブモジュールが使用するメモリ量などを差し引いた値がJavaヒープとして使用できる上限となります。

 “-Xmx”オプションなどにより、その上限を超える値をJavaヒープの大きさとして指定した場合、Java VMは以下のメッセージを出力し、Javaアプリケーションの実行を中止します。
 また、自動調整機能が有効な場合には、メモリ割り当てプールと自動調整機能用の作業域が連続域として確保できない場合にも、Java VMは以下のメッセージを出力し、Javaアプリケーションの実行を中止します。

図4 Javaヒープなどが確保できない場合のメッセージ

Error occurred during initialization of VM
Could not reserve enough space for object heap


 またSolaris用およびLinux用のJava VM起動時にメモリ不足(「ユーザ空間不足」または「仮想メモリ不足」)が発生した場合、Java VMは以下のメッセージを出力し、Javaアプリケーションの実行を中止します。

図5 Java VM起動時にメモリ不足が発生した場合のメッセージ

制御名: mmap failed: errno=12, 制御情報....
Error occurred during initialization of VM
mmap failure

制御名 : メモリ不足が発生した際のJava VMの制御名
制御情報: メモリ不足が発生した際のJava VMの制御情報

 ユーザ空間が不足している場合は、Javaヒープを小さくするチューニングを行ってください。
 仮想メモリが不足している場合は、他の不要なプロセスを終了して仮想メモリに余裕を持たせるか、物理メモリ(RAM)またはスワップファイルを拡張して仮想メモリを増やすようにチューニングを行ってください。


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

Copyright 2008 FUJITSU LIMITED