7.12.3 アプリケーションが使用するメモリサイズ
運用を開始する前に,アプリケーションが使用するExplicitヒープのメモリサイズを見積もり,-XX:HitachiExplicitHeapMaxSizeオプションに設定します。
メモリサイズは,実際に明示管理ヒープ機能を実装したアプリケーションを動作させてテストを実行し,出力されたログを確認して見積もります。見積もった値を,本番で使用する実行環境の-XX:HitachiExplicitHeapMaxSizeオプションに設定します。
ここでは,テストを実行する環境に応じた2種類の見積もり方法について説明します。
どちらの方法でテストを実行する場合も,次のことが前提になります。
- 見積もりの前提
-
-
Explicitヒープの最大サイズを十分に大きく設定してテストを実行してください。
-
-XX:HitachiExplicitMemoryLogLevelオプションには「none」以外を設定してください。
-
見積もりで使用するイベントログの出力項目については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「5.11 明示管理ヒープ機能のイベントログ」を参照してください。
(1) 本番環境と同等の環境でテストを実行できる場合
本番環境と同等の環境でテストを実行できる場合,イベントログに出力されたExplicitヒープの確保済みメモリサイズの最大値をExplicitヒープのメモリサイズとします。
確認手順を示します。
-
テスト用の環境でアプリケーションを一とおり実行します。
アプリケーション実行中にGCが発生した時に,明示管理ヒープ機能のイベントログが出力されます。
-
出力されたイベントログのすべてのレコード(行)のうち,Explicitヒープの確保済みメモリサイズ(<EH_TOTAL>)が最大の値を確認します。
この値を,Explicitヒープのメモリサイズとしてください。ただし,明示管理ヒープの自動解放機能が有効な場合は,この値に「Survivor領域サイズ × 2」を加算した値を,Explicitヒープのメモリサイズとしてください。
(2) 本番環境よりも小さなスケールの環境でテストを実行する場合
本番環境よりも小さなスケールの環境でテストを実行する場合,本番環境で必要なメモリサイズは次の式で見積もります。
本番環境でのExplicitヒープサイズ = (Explicitヒープの最大サイズ)/(Explicitメモリブロックの数) × 本番環境でのExplicitメモリブロック数 + Survivor領域サイズ × 2※
- 注※
-
明示管理ヒープの自動解放機能が有効な場合に「Survivor領域サイズ × 2」を加算します。
-
テスト用の環境でアプリケーションを一とおり実行します。
アプリケーション実行中にGCが発生した時に,明示管理ヒープ機能のイベントログが出力されます。
-
出力されたイベントログのすべてのレコード(行)のうち,Explicitヒープの確保済みメモリサイズ(<EH_TOTAL>)が最大の値を確認します。また,同じレコードに出力されている有効なExplicitメモリブロックの数(<AC_NUM>と<DA_NUM>の合計)を確認します。
-
2.で確認した<EH_TOTAL>の値を(<AC_NUM>+<DA_NUM>)で割ります。
Explicitメモリブロック一つ当たりのおおよそのサイズを算出できます。
-
3.で算出した値に,本番環境で予測される最大のExplicitメモリブロック数を掛けます。
- 注
-
この方法は,開発環境と本番環境でのExplicitメモリブロックの一つ当たりのサイズが同じであり,数だけが異なる場合に適用できます。
また,Explicitヒープを複数の用途に利用している場合,用途ごと(見積もり対象の用途以外のExplicitメモリブロックを利用しない状態)で確認する必要があります。
- ポイント
-
スレッドダンプに出力される項目,および稼働情報に出力される項目の対応を次の表に示します。
表7‒7 スレッドダンプおよび稼働情報の出力項目の対応 スレッドダンプの出力項目
稼働情報の出力項目
出力内容
<EH_TOTAL>
EHeapSize
Explicitヒープの確保済みメモリサイズ
<AC_NUM> + <DA_NUM>
EMemoryBlockCount
同じレコードに出力されている有効なExplicitメモリブロックの数