Cosminexus V9 アプリケーションサーバ 機能解説 拡張編
HTTPセッションに格納するオブジェクトは,セッションが有効な間保持されるオブジェクトです。生存期間は,セッションの生成から破棄までの間です。
このオブジェクトは,明示管理ヒープ機能を使用していない場合,何回かのCopyGCが実行される間使用され続けることが多いオブジェクトです。このため,長寿命オブジェクトとしてTenured領域に昇格しやすくなります。Tenured領域に昇格したオブジェクトはCopyGCでは回収されないため,このオブジェクトはセッションが破棄されたあとも回収されません。このため,Tenured領域のメモリ使用量が増加していき,FullGCが発生します。
明示管理ヒープ機能を利用していない場合の例を次の図に示します。
図8-7 明示管理ヒープ機能を利用していない場合の例
1.でセッションを生成すると,New領域にオブジェクトを格納するための領域が確保されます。2.でセッションにオブジェクトが格納されます。何回かのCopyGCのあと,1.および2.のオブジェクトはTenured領域に移動します。3.でセッションが無効化された場合も,Tenured領域のオブジェクトは回収されないため,メモリ使用量が増加していきます。
これに対して,HTTPセッションに関するオブジェクトの昇格先をTenured領域からExplicitヒープに変更することで,FullGC発生を抑止できます。
明示管理ヒープ機能を利用した例を次の図に示します。
図8-8 明示管理ヒープ機能を利用した例
明示管理ヒープ機能を使用すると,HTTPセッションに関するオブジェクトによるTenured領域の増加がありません。このため,FullGC発生を抑止できます。なお,Explicitヒープに配置したJavaオブジェクトは,セッションが破棄されたあと,J2EEサーバによって明示的に解放されます。
HTTPセッションを配置するExplicitメモリブロック領域の確保および解放のタイミングについて説明します。
Webアプリケーションで実行される操作または動作とJavaVMの動作の対応を次の表に示します。
表8-4 Webアプリケーションで実行される操作(API)とJavaVMの動作の対応
| Webアプリケーションで実行される操作(API)または動作 | Webコンテナの動作 | JavaVMの動作 |
|---|---|---|
|
セッションの生成 | Explicitメモリブロックの確保 |
|
セッションへのオブジェクトの格納 | Explicitメモリブロックへのオブジェクトの配置 |
|
セッションの破棄 | Explicitメモリブロックの解放 |
HTTPセッションとは別に,HTTPセッション管理用オブジェクトのために,Webアプリケーション数+2個※のExplicitメモリブロックがWebコンテナの内部で使用されます。
注※ Webコンテナで,内部的に2個の管理用オブジェクトを持つため,その個数を加算します。
なお,HTTPセッションで使用するExplicitヒープのメモリサイズは,HTTPセッションで利用するExplicitヒープの省メモリ化機能を使用することで削減できます。詳細は,「8.11 HTTPセッションで利用するExplicitヒープのメモリ使用量の削減」を参照してください。また,マニュアル「アプリケーションサーバ システム設計ガイド」の「付録A HTTPセッションで利用するExplicitヒープの効率的な利用」を参照してアプリケーションを実装すると,HTTPセッションに明示管理ヒープ機能を効率良く適用できます。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.