ナビゲーションをスキップ

JRockit JVM チューニング ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

BEA JRockit JVM のチューニング

アプリケーションで、説明のつかない奇妙な休止が起きたことはありませんか。 1 つまたはすべての CPU の利用率が 100% でその他は 0%、しかもシステムにはトランザクションがほとんどないという状況を経験したことはありませんか。 この 2 つの質問のいずれかに該当する場合、アプリケーションはガベージ コレクタの不十分な実行による影響を受けている可能性があります。 メモリ管理システムのチューニングをごく簡単に行うだけで、多くのアプリケーションではパフォーマンスを大幅に改善することができます。

BEA JRockit JVM には、そのままですぐに使用できるように、BEA JRockit JVM が動作する特定のプラットフォームに自動的に適応するデフォルト値が用意されています。 BEA JRockit JVM のチューニングは、非標準の (-X) コマンドライン オプションを起動時に使用して行います。 -X オプションは BEA JRockit JVM 専用です。 このオプションを使用して、BEA JRockit JVM の動作をユーザの Java アプリケーションのニーズに適合させます。

この節では、これらのオプションを使用して BEA JRockit をチューニングする方法について説明します。 内容は以下のとおりです。

注意 : BEA JRockit が予期しない動作をする場合は、BEA JRockit の開発者向け FAQ を参照してください。 それでも問題が解決しない場合は、support@bea.com まで電子メールをお送りください。

 


ヒープ サイズの設定

システムのパフォーマンスは、JVM で使用できる Java ヒープのサイズに大きく影響されます。 この節では、初期ヒープ サイズ、最大ヒープ サイズ、および世代別ガベージ コレクタで必要になるナーサリのサイズの定義に使用するコマンドライン オプションについて説明します。 また、BEA JRockit の実装に最適なヒープ サイズを決定するときに役立つ重要なガイドラインを示します。

初期および最小ヒープ サイズの設定

-Xms<size>

-Xms はヒープの初期および最小サイズを設定します。 このオプションには、最大ヒープ サイズと同じサイズを設定することをお勧めします。次に例を示します。

-java -Xgcprio:throughput -Xmx:64m -Xms:64m myClass

デフォルト

-server モード : システムの空き物理メモリ量の 25% (最大 64MB、最小 8MB)。

-client モード : システムの空き物理メモリ量の 25% (最大 16MB、最小 8MB)。

最大ヒープ サイズの設定

-Xmx:<size>

ほとんどの場合、最大ヒープ サイズは、アプリケーションまたは同じコンピュータ上の他のアプリケーションでページ フォールトを引き起こさない程度に、できる限り大きい値に設定します。 最大ヒープ サイズを設定するには、-Xmx コマンドライン オプションを使用します。たとえば次のようにします。

-java -Xgcprio:throughput -Xmx:64m -Xms:64m myClass

ヒープ サイズ設定のガイドライン

これらのオプションで設定されるものは、将来のリリースで変更される可能性があります。ハードウェア プラットフォーム、オペレーティング システム、使用する BEA JRockit のバージョンなどの多くの要素によって、オプションの設定は変わります。 これらの条件に基づくガイドラインを表 2-1 に示します。

表 2-1 プラットフォーム別のヒープの制限

プラットフォーム

実行できるヒープの量

32 ビット プラットフォーム (IA32)

32 ビット プラットフォームで通常のオペレーティング システムが動作している場合、プロセスのサイズは 2GB 未満に制限されます。 また、ヒープではこのメモリと他のすべての使用中のメモリが共存します。たとえば、アプリケーションで使用されるすべての JNI メモリ、生成コード、スレッド スタック、ヒープ管理、その他の内部構造が、このようなメモリに含まれます。 1.8GB を超えるヒープを使用できますが、ほとんど推奨されません。 通常の初期ヒープのサイズは、1.6GB です。

Windows の使用時は、/PAE または /3GB を指定して起動し、プロセスのサイズを大きくすることができます。 /PAE および /3G の詳細については、以下を参照してください。

http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx

この場合でも、ヒープは連続するメモリ上に存在する必要があります。そのため、依然としてサイズは 2GB 未満に制限されます。

注意 : この制限は BEA JRockit の将来のリリースで変更されるでしょう。

一部の Linux オペレーティング システム (Red Hat Enterprise Linux 4.0 など) では、デフォルトで大きなプロセス サイズがサポートされます。それ以外の Linux オペレーティング システムでも、hugepage カーネルを使って起動できます。 このオプションを使うと、プロセスは 2.7GB のヒープを使用できます。

64 ビット プラットフォーム (x86_64 および IA64)

64 ビット プラットフォームは、ポインタ サイズによる物理的な制約を受けません。プロセスのサイズは、サポートされる上限まで大きくなります。 通常はコンピュータに搭載されているメモリの量が上限ですが、オペレーティング システムのバージョンによってはその制限を受ける場合もあります (たとえば、Windows 2003/Itanium では EE 版を使用していない限り、サポートされるメモリは 16GB までです)。

1.4.2 (24.5.0) までのバージョンの BEA JRockit には、32 ビット インデックスを使うヒープに対応したポインタセットがあります。したがって、24GB を超えるヒープは JVM をクラッシュさせます。

使用するハードウェアに十分なメモリ (Java プロセスとオペレーティング システムの両方にとって十分なメモリ) があるなら、リリースの違いによるパフォーマンスの変化はあまりないはずです。


 

OutOfMemory エラーの発生

OutOfMemory エラーが発生した場合は、上記のガイドラインに従って最大ヒープ サイズを増やしてください。

デフォルト

-server および -client モード : デフォルト値は合計物理メモリの 75% と 1GB のうちの小さい方です。

ナーサリ サイズの設定

-Xns:<size>

-Xns は、世代別ガベージ コレクタにおける若い世代 (ナーサリ) のサイズを設定します。 ガベージ コレクションの休止時間をなるべく短くする一方で、ナーサリを可能な限り大きくするのが最適です。 このことは、多数の一時オブジェクトを作成する場合は特に重要です。

注意 : 休止回数を表示するには、BEA JRockit JVM の起動時に -Xgcpause オプションを指定します。

ナーサリの最大サイズは最大ヒープ サイズの 95% を超えることはできません。

デフォルト

-server モード : デフォルトのナーサリ サイズは CPU ごとに 10MB。たとえば、10 CPU のシステムでは 100MB になります。

-client モード : デフォルトのナーサリ サイズは 2MB。

また、-Xns を使用してより大きな値に明示的に設定しない限り、デフォルトのナーサリは最大ヒープ サイズの 25% を超えることはできません。

ヒープ サイズ設定のガイドライン

以下のガイドラインでは、最適なパフォーマンスを実現するためのヒープ サイズの設定方法についてヒントを提示します。 以下のガイドラインは、主として -server (デフォルト) 起動オプションの場合に有効です (「デフォルト ガベージ コレクタの設定」を参照)。

 


メモリ領域がクリアされる時期の定義

-Xcleartype:<gc|local|alloc>

-Xcleartype は、ガベージ コレクションされたオブジェクトが占有しているメモリ領域がクリアされる時期を定義します。 クリアが実際に実行される時期は、表 2-2 に示すように、選択されるパラメータによって指定します。

表 2-2 -Xcleartype パラメータ

パラメータ

領域をクリアする時期

gc

ガベージ コレクション中

local

スレッドローカル領域の割り当て時

alloc

その領域が新しいオブジェクトに割り当てられるとき

注意 : オブジェクトが大量に割り当てられている場合 (1 ~ 2KB) の優先オプション。 alloc パラメータは IA64 システムでは現在使用できません。

優先オプションは alloc または local です。

デフォルト

-XclearType が設定されていない場合、デフォルトは IA32 システムでは alloc、IA64 システムでは local です。

 


スレッド スタック サイズの設定

-Xss<size>[k|K][m|M]

-Xss<size>[k|K] [m|M] はスレッド スタック サイズを設定します (単位は KB)。

最小スレッド サイズ

最小スレッド スタック サイズは 16KB です。 -Xss を最小値より小さく設定すると、スレッド スタック サイズのデフォルトは自動的に最小値に設定されます。

デフォルト

スレッド スタック サイズを省略した場合のデフォルト値は、BEA JRockit が動作するプラットフォームによって異なります。詳細については、表 2-3 を参照してください。

表 2-3 デフォルトのスレッド スタック サイズ

OS

32 ビットのデフォルト

64 ビットのデフォルト

Windows

64KB

320KB

Linux

128KB

1MB

 

ナビゲーション バーをスキップ  ページの先頭 前 次