フルガーベージコレクションの発生を抑止するためのJavaヒープ,およびExplicitヒープのチューニング手順について説明します。
なお,手順(1)は必ず実施します。手順(2)~(4)は明示管理ヒープ機能を利用してExplicitヒープを使う場合に,手順(1)のあとに続けて実施します。手順(5)以降については,それぞれの手順の説明を確認の上,必要に応じて実施してください。
Javaヒープ,およびExplicitヒープのチューニング手順を次の図に示します。
図7-9 JavaヒープおよびExplicitヒープのチューニング手順
Javaヒープのチューニングによってフルガーベージコレクションを抑止する方法を検討します。Javaヒープのチューニングについては,「7.3 Javaヒープのチューニング」を参照してください。
なお,Explicitヒープ領域を利用しない場合は,Javaヒープのチューニングをした段階でJ2EEサーバのテストを実施してください。Javaヒープのメモリを適切に見積もってもフルガーベージコレクションが頻発する場合は,Survivor領域があふれているなど,チューニングに問題がないか確認してください。再度Javaヒープのチューニングを見直しても問題が発生する場合は,明示管理ヒープ機能を使用したExplicitヒープの利用を検討してください。Explicitヒープを利用する場合は,手順(2)に進んでください。
明示管理ヒープ機能を使用してExplicitヒープ領域を利用する場合に,Explicitヒープ領域のメモリを見積もります。Explicitヒープのチューニングについては,「7.10 Explicitヒープのチューニング」を参照してください。
J2EEサーバの場合,明示管理ヒープ機能はデフォルトで使用する設定になっています。また,Tenured領域のメモリサイズ増加の要因となるオブジェクトがExplicitヒープに配置されるように設定されています。このため,J2EEサーバが配置するオブジェクトに必要なExplicitヒープのメモリサイズを必ず見積もってください。明示管理ヒープ機能は,Explicitヒープのメモリサイズを適切に見積もった上で使用しないと,効果が出ません。
明示管理ヒープ機能を使用する場合に,手順(1)および手順(2)でJavaVMのメモリを適切に見積もったあと,J2EEサーバのテストを実施します。テストで得た稼働情報を収集してExplicitヒープの使用状況を確認します。稼働情報を基にしたExplicitヒープの見積もりについては「7.10.5 稼働情報による見積もり」を参照してください。
アプリケーションを開始して,Tenured領域のメモリサイズを調査します。調査には,手順(3)で取得した稼働情報,または拡張verbosegc情報で取得した情報を使用します。拡張verbosegc情報の取得については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守/移行/互換編」の「5.7.2 拡張verbosegc情報の取得」を参照してください。
手順(4)でTenured領域のメモリサイズの増加が確認された場合,必要に応じて任意のオブジェクトをExplicitヒープに生成するように自動配置設定ファイルを設定します。自動配置設定ファイルを使用するかどうかの検討については,「7.12 明示管理ヒープの自動配置機能を使用したExplicitヒープの利用の検討」を参照してください。
Explicitヒープへオブジェクトを生成する場合,Javaヒープへオブジェクトを生成する場合に比べて実行時のオーバーヘッドが大きくなります。そのため,Explicitヒープへオブジェクトを生成する場合は,オブジェクトの生成個所を絞り込むことで,実行時のオーバーヘッドを小さくできます。自動配置設定ファイルについては,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「8.11.2 自動配置設定ファイルを使った明示管理ヒープ機能の使用」を参照してください。
手順(5)で修正したアプリケーションを動作させて,J2EEサーバとアプリケーションが使用するExplicitヒープ全体のメモリサイズを見直します。見直し方法については,「7.11 アプリケーションで明示管理ヒープ機能を使用する場合のメモリサイズの見積もり」を参照してください。