7.2.2 チューニング手順

フルガーベージコレクションの発生を抑止するためのJavaヒープ,およびExplicitヒープのチューニング手順について説明します。

なお,手順(1)は必ず実施します。手順(2)~(4)は明示管理ヒープ機能を利用してExplicitヒープを使う場合に,手順(1)のあとに続けて実施します。手順(5)以降については,それぞれの手順の説明を確認の上,必要に応じて実施してください。

Javaヒープ,およびExplicitヒープのチューニング手順を次の図に示します。

図7-9 JavaヒープおよびExplicitヒープのチューニング手順

[図データ]

<この項の構成>
(1) Javaヒープのチューニング
(2) Explicitヒープのチューニング
(3) 稼働情報による見積もり結果の確認
(4) Tenured領域のメモリサイズが増加するかどうかの確認
(5) Explicitヒープへのオブジェクトの生成
(6) Explicitヒープ全体のメモリサイズの見直し

(1) Javaヒープのチューニング

Javaヒープのチューニングによってフルガーベージコレクションを抑止する方法を検討します。Javaヒープのチューニングについては,「7.3 Javaヒープのチューニング」を参照してください。

なお,Explicitヒープ領域を利用しない場合は,Javaヒープのチューニングをした段階でJ2EEサーバのテストを実施してください。Javaヒープのメモリを適切に見積もってもフルガーベージコレクションが頻発する場合は,Survivor領域があふれているなど,チューニングに問題がないか確認してください。再度Javaヒープのチューニングを見直しても問題が発生する場合は,明示管理ヒープ機能を使用したExplicitヒープの利用を検討してください。Explicitヒープを利用する場合は,手順(2)に進んでください。

(2) Explicitヒープのチューニング

明示管理ヒープ機能を使用してExplicitヒープ領域を利用する場合に,Explicitヒープ領域のメモリを見積もります。Explicitヒープのチューニングについては,「7.10 Explicitヒープのチューニング」を参照してください。

J2EEサーバの場合,明示管理ヒープ機能はデフォルトで使用する設定になっています。また,Tenured領域のメモリサイズ増加の要因となるオブジェクトがExplicitヒープに配置されるように設定されています。このため,J2EEサーバが配置するオブジェクトに必要なExplicitヒープのメモリサイズを必ず見積もってください。明示管理ヒープ機能は,Explicitヒープのメモリサイズを適切に見積もった上で使用しないと,効果が出ません。

(3) 稼働情報による見積もり結果の確認

明示管理ヒープ機能を使用する場合に,手順(1)および手順(2)でJavaVMのメモリを適切に見積もったあと,J2EEサーバのテストを実施します。テストで得た稼働情報を収集してExplicitヒープの使用状況を確認します。稼働情報を基にしたExplicitヒープの見積もりについては「7.10.5 稼働情報による見積もり」を参照してください。

参考
J2EEサーバのテストを実施し,フルガーベージコレクションの発生回数が削減できない場合は,次の内容を確認してください。
  • Survivor領域があふれているなど,Javaヒープのチューニングに問題がないか
    手順(1)で見積もった値が適切かを見直します。
  • Explicitヒープがあふれていないか
    手順(2)で見積もった値が適切かを見直します。
  • Webアプリケーションの構成が適切か
    Webアプリケーションの構成(アプリケーション内のAPIの使用方法など)によっては,HTTPセッションに関するオブジェクトに対して,明示管理ヒープ機能の効果が出ない場合があります。詳細は,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「8.12 明示管理ヒープ機能使用時の注意事項」を参照してください。
これらを確認しても問題が解決しない場合に,手順(4)に進んでください。

(4) Tenured領域のメモリサイズが増加するかどうかの確認

アプリケーションを開始して,Tenured領域のメモリサイズを調査します。調査には,手順(3)で取得した稼働情報,または拡張verbosegc情報で取得した情報を使用します。拡張verbosegc情報の取得については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 保守/移行/互換編」の「5.7.2 拡張verbosegc情報の取得」を参照してください。

(5) Explicitヒープへのオブジェクトの生成

手順(4)でTenured領域のメモリサイズの増加が確認された場合,必要に応じて任意のオブジェクトをExplicitヒープに生成するように自動配置設定ファイルを設定します。自動配置設定ファイルを使用するかどうかの検討については,「7.12 明示管理ヒープの自動配置機能を使用したExplicitヒープの利用の検討」を参照してください。

Explicitヒープへオブジェクトを生成する場合,Javaヒープへオブジェクトを生成する場合に比べて実行時のオーバーヘッドが大きくなります。そのため,Explicitヒープへオブジェクトを生成する場合は,オブジェクトの生成個所を絞り込むことで,実行時のオーバーヘッドを小さくできます。自動配置設定ファイルについては,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「8.11.2 自動配置設定ファイルを使った明示管理ヒープ機能の使用」を参照してください。

注意
明示管理ヒープ機能APIを使用して実装する場合は,Explicitヒープに格納するオブジェクトのライフサイクルが既知である必要があります。具体的には,オブジェクトの生成,およびオブジェクトが不要になるタイミングが,Javaプログラム上で明確になっている必要があります。明示管理ヒープ機能APIを使用した実装については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「8.10 明示管理ヒープ機能APIを使ったJavaプログラムの実装」を参照してください。

(6) Explicitヒープ全体のメモリサイズの見直し

手順(5)で修正したアプリケーションを動作させて,J2EEサーバとアプリケーションが使用するExplicitヒープ全体のメモリサイズを見直します。見直し方法については,「7.11 アプリケーションで明示管理ヒープ機能を使用する場合のメモリサイズの見積もり」を参照してください。

ポイント
明示管理ヒープ機能によってフルガーベージコレクションの発生抑止の効果を得るためには,Explicitヒープからオブジェクトがあふれないようにする必要があります。次の点を確認してください。
  • Webアプリケーション内でセッションの破棄(invalidateメソッド呼び出し)および適切なセッションタイムアウトを設定していること。
  • 適切なメモリサイズのExplicitヒープ領域をJavaヒープ領域とは別に確保できること。
Explicitヒープあふれが発生した場合の確認と対処については,「7.11.4(3) Explicitヒープあふれが発生した場合の確認と対処」を参照してください。
以降では,Javaヒープのチューニング,およびExplicitヒープのチューニングについて説明します。なお,これ以外の注意事項については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「8. 明示管理ヒープ機能を使用したフルガーベージコレクションの抑止」を参照してください。