ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server チューニングガイド

7.5.2 Javaヒープのチューニング

  本節では、Javaヒープのチューニング方法および、チューニングによる影響範囲を説明します。

■チューニング方法

  Javaヒープの各領域のサイズは、“表7.6 Javaヒープに関するオプション”に示すオプションをJava起動時に指定することで設定ができます。

  なお、メモリ割り当てプールのデフォルトの初期値および最大値を、“表7.7 メモリ割り当てプールのデフォルトのサイズ”に示します。
  また、Permanent世代領域のデフォルトの初期値および最大値を、“表7.8 Permanent世代領域のデフォルトのサイズ”に示します。

表7.6 Javaヒープに関するオプション

オプション

オプションの機能

-Xms

メモリ割り当てプールの初期値を指定します。
たとえば、メモリ割り当てプールの初期値を128MBに設定する場合、”-Xms128m”と指定します。

-Xmx

メモリ割り当てプールの最大値を指定します。
たとえば、メモリ割り当てプールの最大値を256MBに設定する場合、”-Xmx256m”と指定します。

-XX:NewSize (注1)

New世代領域のヒープサイズを指定します。
たとえば、New世代領域のヒープサイズを128MBに設定する場合、”-XX:NewSize=128m”と指定します。

-XX:MaxNewSize (注1)

New世代領域の最大ヒープサイズを設定します。
たとえば、New世代領域の最大ヒープサイズを128MBに設定する場合、”-XX:MaxNewSize=128m”と指定します。

-XX:NewRatio (注1)

New世代領域Old世代領域のサイズ比率を指定します。
たとえば、New世代領域Old世代領域のサイズ比率を2とする場合、”-XX:NewRatio=2”と指定します。

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

New世代領域を構成するEden領域Survivor領域のサイズ比率を指定します。
たとえば、Eden領域Survivor領域のサイズ比率を8とする場合、”-XX:SurvivorRatio=8”と指定します。

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

ガーベジコレクション(GC)処理後の生存オブジェクトがSurvivor領域を占める割合を、指定したパーセンテージ値に調整します。
たとえば、GC処理後の生存オブジェクトがSurvivor領域を占める割合を半分とする場合、”-XX:TargetSurvivorRatio=50”と指定します。

-XX:PermSize

Permanent世代領域の初期値を指定します。
たとえば、Permanent世代領域の初期値を32MBに設定する場合、”-XX:PermSize=32m”と指定します。

-XX:MaxPermSize

Permanent世代領域の最大値を指定します。
たとえば、Permanent世代領域の最大値を128MBに設定する場合、”-XX:MaxPermSize=128m”と指定します。

注1) FJGCを使用する場合、このオプションへの指定値は無効となります。
注2) パラレルGCを使用する場合、このオプションへの指定値は無効となります。
注3) サイズを指定するオプションでは単位として次の文字を指定できます。

      KB(キロバイト)を指定する場合:kまたはK
      MB(メガバイト)を指定する場合:
mまたはM

表7.7 メモリ割り当てプールのデフォルトのサイズ

JDK/JREのバージョン

OS

JDK/JREの実行モード

GC処理

初期値

最大値

JDK/JRE 1.4

Windows

(ただし、Windows Server(R) for Itanium-based Systemsを除く)

RHEL-AS4(x86)/AS4(EM64T)

32ビットモード

シリアルGC
FJCG (注1)

2.0MB

64MB

Solaris

32ビットモード

シリアルGC
FJCG (注1)

3.5MB

Windows Server(R) 2003 for Itanium-based Systems
RHEL-AS4(IPF)

64ビットモード

シリアルGC (注1)

3.5MB

JDK/JRE 5.0

Windows
(ただし、Windows Server(R) for Itanium-based Systemsを除く)

Linux for x86

Linux for Intel64

32ビットモード

シリアルGC
FJCG

2.0MB

64MB

パラレルGC (注1)

5.375MB

Solaris

32ビットモード

シリアルGC
FJCG

3.5MB

パラレルGC (注1)

5.375MB

Windows Server(R) x64 Editions

Linux for Intel64

64ビットモード

シリアルGC

4.3125MB

84MB

パラレルGC (注1)

5.75MB

Windows Server(R) for Itanium-based Systems

Linux for Itanium

64ビットモード

シリアルGC

4.5MB

88MB

パラレルGC (注1)

5.75MB

JDK/JRE 6

Windows(ただし、Windows Server(R) for Itanium-based Systemsは除く)
Linux for x86

Linux for Intel64

32ビットモード

シリアルGC

5.0MB

64MB

パラレルGC (注1)

8.0MB

Solaris

32ビットモード

シリアルGC

6.125MB

パラレルGC (注1)

8.0MB

Windows Server(R) for x64 Editions

RHEL5(Intel64)

64ビットモード

シリアルGC

7.75MB

84MB

パラレルGC (注1)

9.1875MB

注1) デフォルトで使用されるGC処理です。

表7.8 Permanent世代領域のデフォルトのサイズ

JDK/JREのバージョン

OS

JDK/JREの実行モード

Java VM

初期値

最大値

JDK/JRE 1.4

Windows

(ただし、Windows Server(R) for Itanium-based Systemsを除く)

RHEL-AS4(x86)/AS4(EM64T)

Solaris

32ビットモード

Java HotSpot Client VM

4MB

64MB

FJVM (注1)

16MB

Windows Server(R) 2003 for Itanium-based Systems
RHEL-AS4(IPF)

64ビットモード

FJVM (注1)

16MB

JDK/JRE 5.0

Windows
(ただし、Windows Server(R) for Itanium-based Systemsを除く)

Linux for x86

Linux for Intel64

Solaris

32ビットモード

Java HotSpot Client VM

8MB

64MB

FJVM (注1)

16MB

Windows Server(R) x64 Editions

Linux for Intel64

64ビットモード

FJVM (注1)

20.75MB

84MB

Windows Server(R) for Itanium-based Systems

Linux for Itanium

88MB

JDK/JRE 6

Windows(ただし、Windows Server(R) for Itanium-based Systemsは除く)
Solaris
Linux for x86

Linux for Intel64

32ビットモード

Java HotSpot Client VM

12MB

64MB

FJVM (注1)

16MB

Windows Server(R) x64 Editions

RHEL5(Intel64)

64ビットモード

FJVM (注1)

20.75MB

84MB

注1) デフォルトで使用されるJava VMです。

■チューニングの方針

  Javaヒープをチューニングする際、次の方針があります。

  1. FullGCを実行したにもかかわらず、メモリ不足が発生する場合、GCのログを採取し、メモリ割り当てプールまたはPermanent世代領域のいずれかの領域が不足しているかどうかを確認します。

  2. FullGCはコストがかかります。このため、メモリ不足が発生しなくても、Javaアプリケーションがハングアップしたかのように一時的に無反応になる場合、FullGCの影響を受けている場合があります。GCのログを採取し、Javaヒープが必要以上に大きなサイズになっていれば、Javaヒープのサイズを縮小する方針でチューニングします。

  3. 効率的なNew世代GCに対して、FullGCはコストがかかります。このため、New世代領域Old世代領域のサイズのバランスを考慮する必要があります。なお、FJVMでFJGCを使用する場合、New世代領域サイズ自動調整機能を実装しているため、通常はこのバランスを考慮する必要はありません。

  4. 仮想メモリに余裕がある場合は、Javaプロセスを複数起動して、プロセス多重度を上げる方法を検討します。プロセス多重度を上げることにより、プロセスごとのユーザ空間を有効に使うことが可能になります。ただし、メモリのスワッピングによるスローダウンに注意する必要があります。

■チューニングの影響範囲

  Javaヒープ全体のサイズを変更した場合の影響範囲を、次に示します。

  1. Javaヒープ全体のサイズを縮小した場合、GCが頻発することがあります。

  2. Javaヒープ全体のサイズを拡張した場合、FullGCに時間がかかることがあります。

  3. Javaヒープ全体のサイズを拡張した場合、その分ユーザ空間や仮想メモリが少なくなるため、スタックやネイティブモジュールの動作に必要な領域を確保できず、メモリ不足になることがあります。

overcommit memory機能が有効な場合の注意事項

  「overcommit memory機能」が有効な場合、Linuxは、Javaヒープの各領域の最大値に相当する仮想メモリ資源を、Java VMの起動時に、Javaプロセスに対して予約します。
  このため、-Xms値と-Xmx値を異なる値にしてJavaプロセスを起動する場合、本機能の有効/無効によって、Javaプロセス起動時にJavaヒープとして必要となる仮想メモリの量が異なります。