[Seasar-user:20808] Re: [Doma]バージョン1.15.0にてSELECT文解析時にOutOfMemoryErrorが発生
Toshihiro Nakamura
[E-MAIL ADDRESS DELETED]
2011年 6月 20日 (月) 15:26:49 JST
中村(taedium)です。
> あるSELECT文というのは今のところ1つのみで以下の特徴があります。
> (heapdumpのレポートを見て関連してそうなところをPickup)
> ・SelectOptionsを使用してページングを実施
> ・条件コメントが比較的多い
SQLファイルを見せてもらえないでしょうか?
テーブル名、カラム名、バインド変数名などは
見られてもいいように変更してください。
ただし、私が見たいポイントはSQL文の構造なので、
SQLのキーワード、コメント、改行の位置など
は変えないようにお願いします。
また、SelectOptionsへの設定内容も教えてください。
> お世話になります。
> 工藤と申します。
>
> 現在、以下のプロダクトを利用させていただきWebアプリケーションを開発しております。
> s2-framework:2.4.43
> s2-extension:2.4.43
> s2-tiger:2.4.43
> cubby:2.0.9
> Doma:1.13.0
>
> 本日、以下のようにバージョンアップを実施しまして動作確認を行ったところ
> あるSELECT文を実行すると必ずOutOfMemoryErrorが発生してしまうためご報告させていただきます。
> (すべてのSELECTではなく特定のSELECTで発生します)
> s2-framework:2.4.44
> s2-extension:2.4.44
> s2-tiger:2.4.44
> Doma:1.15.0
>
> S2を2.4.43、Domaが1.15.0の場合にも発生し、
> Hotdeploy、Cooldeployモードいずれの場合にも発生します。
>
> Doma:1.14.0の場合は問題なく動作しております。
>
> あるSELECT文というのは今のところ1つのみで以下の特徴があります。
> (heapdumpのレポートを見て関連してそうなところをPickup)
> ・SelectOptionsを使用してページングを実施
> ・条件コメントが比較的多い
>
> ifブロックが全部で31、うちネストしている個所が3か所で最大ネスト数は2
>
> 動作確認を実施した環境は以下の通りです。
> JDK:1.6.0_21
> Tomcat: 6.0.21 (-XX:MaxPermSize=256m, -XX:PermSize=256m)
> OS:WindowsXP SP3
> DB:Oracle 11g
>
> 発生時のログ
> ----
> java.lang.OutOfMemoryError: Java heap space
> at java.util.ArrayList.<init>(ArrayList.java:112)
> at java.util.ArrayList.<init>(ArrayList.java:119)
> at
> org.seasar.doma.internal.jdbc.sql.node.AbstractSqlNode.<init>(AbstractSqlNode.java:30)
> at
> org.seasar.doma.internal.jdbc.sql.node.BindVariableNode.<init>(BindVariableNode.java:38)
> at
> org.seasar.doma.internal.jdbc.sql.node.BindVariableNode.copy(BindVariableNode.java:59)
> at
> org.seasar.doma.internal.jdbc.sql.node.BindVariableNode.copy(BindVariableNode.java:25)
> at
> org.seasar.doma.internal.jdbc.sql.node.LogicalOperatorNode.copy(LogicalOperatorNode.java:46)
> at
> org.seasar.doma.internal.jdbc.sql.node.LogicalOperatorNode.copy(LogicalOperatorNode.java:26)
> at org.seasar.doma.internal.jdbc.sql.node.IfNode.copy(IfNode.java:60)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:100)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:109)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:26)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:112)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:26)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:112)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:109)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:26)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:112)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> at org.seasar.doma.internal.jdbc.sql.node.EndNode.copy(EndNode.java:43)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:109)
> at
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNode.copy(IfBlockNode.java:30)
> Exception in thread "Seasar2-TimeoutManager" java.lang.OutOfMemoryError:
> Java heap space
> at java.util.AbstractList.iterator(AbstractList.java:273)
> at org.seasar.extension.timer.TimeoutManager.run(TimeoutManager.java:142)
> at java.lang.Thread.run(Thread.java:619)
> ----
> heapdumpの結果からは
> org.seasar.doma.internal.jdbc.sql.node.IfBlockNodeというクラスがメモリ中の8割を占めている状態でした。
>
> より詳細な情報が必要でしたら
> heapdumpのレポートファイル等を添付いたしますので
> お手数ではございますが送付先をご連絡いただければと思います。
>
> 以上です。
> ---
> h-kudo <[E-MAIL ADDRESS DELETED]>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
--
Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内