[Seasar-user:20807] [Doma]バージョン1.15.0にてSELECT文解析時にOutOfMemoryErrorが発生
h-kudo
[E-MAIL ADDRESS DELETED]
2011年 6月 20日 (月) 14:49:36 JST
お世話になります。
工藤と申します。
現在、以下のプロダクトを利用させていただき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 メーリングリストの案内