●問題点
SQL検索を実行していくと徐々にJVMのpermanent領域を圧迫しGCのタイミングでも開放されず
java.lang.OutOfMemoryError: PermGen space が発生してしまう。
※SQL検索は一度の実行ではなく複数回(本事象では500回程度)実行すると発生します。

●環境
OS:Windows2008Server
Java:JDK V6.0.13
DB:Microsoft SQLServer 2005 Standard Edition
Tomcat:Tomcat V6.0.18
(オプション設定)
Xms512m
Xmx512m
XX:PermSize=512M
XX:MaxNewSize=512m
XX:MaxPermSize=512m

●実装方法
S2Daoで@SqlFileを使用しSQLの実行を行う。
XXXXXConditionDtoを使用し引数を条件を受け渡す。

SQLファイルを2つ用意する ※SQLの内容は同じ
一方だけにWhere句にIf文を追加する
例)
/*IF BBB != null*/
AND AAAA >= /*BBB*/
/*END*/
IF文の結果もfalseになるので実行されるSQLは全く同じ

●結果
IF文がないSQLファイルの場合 ⇒ OutOfMemoryErrorが発生しない
IF文があるSQLファイルの場合 ⇒ OutOfMemoryErrorが発生

S2DaoのIF文を解析するクラスがメモリに溜まっていると推測されますが
解決方法はありますでしょうか?

●回答 ちょっとこの情報だと起きている情報がわからないので、 プロファイラや-Xverbosegcでどのクラスが「溜まっている」のか調べられないでしょうか。 そのうえで新しい情報があれば、Seasar-Userメーリングリストまでよろしくお願いします。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-06-16 (水) 17:38:18