[Seasar-user:20809] Re: [Doma]バージョン1.15.0にてSELECT文解析時にOutOfMemoryErrorが発生

h-kudo [E-MAIL ADDRESS DELETED]
2011年 6月 20日 (月) 16:15:53 JST


工藤です。

>>
ある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


Seasar-user メーリングリストの案内