javax.servlet.http.HttpSession を使用してセッション管理をしているのですが、このサーブレットに一斉にアクセスを行うと、getSession()メソッドの処理時間が、
どんどん長くなっていってしまいます。getSession()の処理時間を短くするための対処方法を教えてください。
セッション生成に時間がかかるのか、セッション生成にかかわらず処理が遅いのかなど原因により対処方法が変わります。
以下に、推定される原因と対処方法を記載します。
1)全般的に処理に時間がかかる。
[原因]
大量にセッション生成を行い、破棄を行っているため、 メモリの取得、解放が頻繁に繰り返されている。これにより頻繁にJVMのフルGCが実行されている。
[改善策]
JVMのオプションで、メモリの設定はデフォルトでは次のようになっています。
-Xms64m ⇒ 初期値 64MB
-Xmx512m ⇒ 最大値 512MB
初期値を最大値にあわせてください。 FGCの代りに比較的負荷の低いYGCによりメモリが回収されるので全体的な処理性能が改善します。メモリサイズが拡大できるなら、最大値も調整してください。
例:
初期値 768MB
最大値 768MB
2)セッション生成に時間がかかる。
[原因]
セッションレプリケーション(Webアプリケーション内のWEB-INF/web.xmlに<distributable /> を記述)をしている場合、セッション数がセッション最大数を超えていないか情報を取得するのに時間がかかることがあります。
[改善策]
現在のWebOTXのバージョンが V6.50.03 以前であれば、パッチ(V6.50.04以降)を適用することでつぎの条件の場合に改善が見込まれます。
・セッションレプリケーションしている。
・登録されているセッション数が多い。
・セッション数の上限が無制限の設定である(デフォルト)
【対象製品】Application Server
【確認済みのバージョン】 すべて
【確認済みのエディション】 すべて
【確認済みの対象OS】すべて
【確認済みのJavaバージョン】すべて
【コンポーネント】Webコンテナ
【カテゴリー】開発/設計(性能チューニング)