Hitachi

Cosminexus V11 アプリケーションサーバ システム設計ガイド


7.3.1 チューニングの考え方

一般的に,CopyGCの方が,FullGCよりも短い時間で処理できます。

New領域へのCopyGCの実施によって適切にメモリを回収して,Javaヒープ全体を対象とするFullGCの発生をできるだけ抑止することが,システムの停止回数の削減や,処理性能向上につながります。これを実現するためには,JavaVMオプションでそれぞれのメモリ空間のサイズや割合を適切に設定することが必要です。

また,Tenured領域に配置されるオブジェクトの一部を,明示管理ヒープ機能で管理するExplicitヒープに配置することも,FullGCの発生抑止に効果的です。Explicitヒープは,自動配置設定ファイルや明示管理ヒープAPIを使ってアプリケーションから利用でき,J2EEサーバからも利用されます。明示管理ヒープ機能のデフォルトの設定では,自動解放機能が有効になっています。自動解放機能が有効の場合,JavaVMは,Explicitヒープ領域のメモリを自動的に回収します。Explicitヒープの利用のしかたによっては,自動解放処理が長時間終了しないことがあります。このため,長時間終了しない自動解放処理が発生しないように,明示管理ヒープ機能の適切な利用や,Explicitヒープのメモリサイズの適切なチューニングを実施する必要があります。なお,自動解放処理については,マニュアル「アプリケーションサーバ 機能解説 拡張編」の「7.7 自動解放機能が有効な場合のExplicitメモリブロックの解放」を参照してください。

これらを踏まえ,JavaVMのチューニングは,次の2点を目的として実施します。

理想的なメモリ使用量と経過時間の関係を次の図に示します。

図7‒8 理想的なメモリ使用量と経過時間の関係

[図データ]

この図の場合は,寿命の短いオブジェクトはすべてCopyGCによって回収できていて,オブジェクトの昇格や退避が発生しません。このため,CopyGC実行後のメモリサイズが一定です。これによって,FullGCが発生しない,安定した状態での運用を実現できます。

JavaVMのチューニングでは,この状態を理想として,JavaVMの使用するメモリ空間の各領域で使用するメモリサイズを見積もってチューニングします。

ポイント

チューニングの目安

図7-8では,FullGCを一度も発生させない理想的な例を示しましたが,現実的にはFullGCが1回発生する間にCopyGCが10〜20回程度発生することを目安にして,チューニングを実施してください。