[mayaa-user:1033] Re: mayaaのメモリリークにつきまして

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2014年 4月 25日 (金) 22:58:52 JST


石上です。

スタックトレースを拝見させていただきましたが、私のところで発生している現象とは異なる箇所のようです。
早とちりで申し訳ありません。

org.seasar.mayaa.impl.util.ReferenceCache.ReferenceCacheIterator.hasNext()
内部でスレッドが停止しているように思われますので、
Full-GCが発生して、ReferenceCacheのリストが大量に破棄されてしまったのかもしれません。

jstat -gcutilなどを使用して、当該現象発生時のGCのログを確認してみるとなにかわかるかもしれません。
JVMパラメータのチューニングも役立つかもしれません。
ヒープダンプを取ることが可能でしたら解析する価値もあると思います。

2014年4月25日 22:30 Hara Hara <iso_hara @ hotmail.com>:
> 石上様
>
> ご教示いただきありがとうございます。
> わたくしの現象でも高負荷環境で、特にmayaaファイルが複雑で
> DOMツリーの深いテンプレートで発生しております。
>
>
>> ・pageSerializeを有効にし、起動時にautoBuildを使用する
>> ・ランタイムのテンプレートやmayaaファイルの更新を許可しない運用とする
>> ・XPathを使用しない(org.seasar.mayaa.provider.ServiceProviderで
>>  <resolver
>> class="org.seasar.mayaa.impl.builder.injection.XPathMatchesInjectionResolver"/>
>>  をコメントアウト)
>> ・アプリケーションサーバーの同時処理スレッド数を減らす(全体のレスポンスが低下する可能性があります)
> ありがとうございます、サイトの運用上、どうしても頻繁にテンプレートの更新が
> 発生してしまいますが、
> 可能な限り負荷の少ない時間帯で更新を行うよう心がけます。
> また、XPathは使用しておりませんので、コメントアウトをいたします。
> autoBuildは次回再起動時に設定してみます。
>
> 今後も石上様のMLを参考にさせていただきます。
> 引き続き、どうぞよろしくお願いいたします。
>
>> From: susumu.ishigami @ gmail.com
>> Date: Fri, 25 Apr 2014 11:52:08 +0900
>> To: mayaa-user @ ml.seasar.org
>> Subject: [mayaa-user:1030] Re: mayaaのメモリリークにつきまして
>
>>
>> 石上と申します
>>
>> > 稀にページ表示に30秒ちかくかかることがあり、そういう場合に下記のような状態のスレッドが
>>
>> 一ユーザーとしてですが、私も、やはりレンダリングに30秒近くかかることを観測しています
>> 当該スレッドについては私の環境では観測しておりませんが、概ね下記の条件下で発生しています。
>>
>> ・高負荷環境(秒間数十PV以上)
>> ・テンプレートファイルの更新直後(キャッシュ破棄→再ビルド)
>> ・比較的大きめでDOMツリーが深いテンプレートファイル
>> ・XPathを使用している
>> ・mayaaファイル(特にdefault.mayaa)が巨大
>>
>> もし、条件が同じであれば、
>> JMeterで高負荷をかけることで、ローカル環境でも再現できます。
>> もし、次の対策が可能なら、解消できるかもしれません。
>>
>> ・pageSerializeを有効にし、起動時にautoBuildを使用する
>> ・ランタイムのテンプレートやmayaaファイルの更新を許可しない運用とする
>> ・XPathを使用しない(org.seasar.mayaa.provider.ServiceProviderで
>>  <resolver
>> class="org.seasar.mayaa.impl.builder.injection.XPathMatchesInjectionResolver"/>
>>  をコメントアウト)
>> ・アプリケーションサーバーの同時処理スレッド数を減らす(全体のレスポンスが低下する可能性があります)
>>
>> まだ効果が出せるかわかりませんが
>> 別スレッドでsugaさんにアドバイスをいただきながら
>> この件の対策を行っておりますので、
>> 共有できることがあれば報告させていただきます。
>> (詳しくは [mayaa-user:1023] Re: 頻繁にレンダリングを行っていると、ページのビルドが遅くなります をご参照ください)
>>
>>
>> 2014年4月25日 6:57 suga <ko.suga @ gmail.com>:
>> > sugaです。
>> >
>> > これ自体は単にsynchronizedの待ちなので正常にありえます。
>> > 同じオブジェクトを延々待ち続けているとかなら問題の可能性はありますが。
>> >
>> >
>> > 2014年4月24日木曜日、Hara Hara<iso_hara @ hotmail.com>さんは書きました:
>> >
>> >> suga様
>> >>
>> >> いつもお世話になっております。
>> >> 大変申し訳ございません、メモリリークではなく無限ループですね・・・
>> >> 確認したところ、insertタグでnameを指定していないところがあり、
>> >> それがループしていたようです。
>> >> お忙しいところお手間と取らせてしまい申し訳ございません。
>> >>
>> >> 大変恐縮ですが、もう一点ご教示いただけますでしょうか。
>> >> 稀にページ表示に30秒ちかくかかることがあり、そういう場合に下記のような状態のスレッドが
>> >> 幾つか存在しているのですが、これは問題ないでしょうか。
>> >>
>> >> java.lang.Thread.State: BLOCKED (on object monitor)
>> >> at
>> >>
>> >> org.seasar.mayaa.impl.engine.specification.NamespaceImpl.getInstance(NamespaceImpl.java:54)
>> >> - waiting to lock <0x00000000c6fcc808> (a
>> >> org.seasar.mayaa.impl.util.ReferenceCache)
>> >> at
>> >>
>> >> org.seasar.mayaa.impl.engine.specification.NamespaceImpl.copyOf(NamespaceImpl.java:77)
>> >>
>> >> どうぞよろしくお願いいたします。
>> >>
>> >> > Date: Wed, 23 Apr 2014 07:59:12 +0900
>> >> > From: ko.suga @ gmail.com
>> >> > To: mayaa-user @ ml.seasar.org
>> >> > Subject: [mayaa-user:1025] Re: mayaaのメモリリークにつきまして
>> >> >
>> >> > suga です。
>> >> >
>> >> > まず、subjectにメモリリークとありますが、メモリリークだと判断した
>> >> > 理由は何でしょうか。文面にある情報からでは分かりませんが。
>> >> >
>> >> > InsertProcessor があるのでどこかで m:insert を使っているようですが、
>> >> > 循環してはいないでしょうか。
>> >> >
>> >> >
>> >> > --
>> >> > suga ( ko.suga @ gmail.com )
>> >> >
>> >> >
>> >> > 2014-04-23 0:21 GMT+09:00 Hara Hara <iso_hara @ hotmail.com>:
>> >> > > お世話になっております。 石川と申します。
>> >> > >
>> >> > > Tomcat7+JDK6で稼働中のアプリで、スレッドダンプを取った時に下記のログが
>> >> > > 出力されます。
>> >> > >
>> >> > > "http-bio-8083-exec-5" daemon prio=10 tid=0x00007f035c0d4800
>> >> > > nid=0x6ecb
>> >> > > runnable [0x00007f039cc1a000]
>> >> > > java.lang.Thread.State: RUNNABLE
>> >> > > at java.util.HashMap.getEntry(HashMap.java:364)
>> >> > > at java.util.HashMap.containsKey(HashMap.java:352)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.PageAttributeScope.has(PageAttributeScope.java:83)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.PageAttributeScope.findScope(PageAttributeScope.java:140)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.PageAttributeScope.hasAttribute(PageAttributeScope.java:148)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.CycleUtil.findStandardAttributeScope(CycleUtil.java:149)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.NativeServiceCycle.get(NativeServiceCycle.java:75)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.mozilla.javascript.ScriptableObject.getProperty(ScriptableObject.java:1617)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.mozilla.javascript.ScriptRuntime.nameOrFunction(ScriptRuntime.java:1746)
>> >> > > at
>> >> > > org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java:1697)
>> >> > > at org.mozilla.javascript.gen.c83128._c0(☆☆☆.mayaa#attribute:83)
>> >> > > at org.mozilla.javascript.gen.c83128.call(☆☆☆.mayaa#attribute)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:398)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3065)
>> >> > > at org.mozilla.javascript.gen.c83128.call(☆☆☆.mayaa#attribute)
>> >> > > at org.mozilla.javascript.gen.c83128.exec(☆☆☆.mayaa#attribute)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.normalExecute(TextCompiledScriptImpl.java:126)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.execute(TextCompiledScriptImpl.java:166)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.cycle.script.ComplexScript.execute(ComplexScript.java:55)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.AttributeProcessor$ScriptWrapper.execute(AttributeProcessor.java:279)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.AttributeProcessor$EscapableScript.execute(AttributeProcessor.java:209)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.ElementProcessor.appendAttributeString(ElementProcessor.java:308)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.ElementProcessor.writePart2(ElementProcessor.java:372)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.ElementProcessor.writeStartElement(ElementProcessor.java:431)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.AbstractAttributableProcessor.processEnd(AbstractAttributableProcessor.java:237)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.ElementProcessor.processEnd(ElementProcessor.java:459)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.AbstractAttributableProcessor.doEndProcess(AbstractAttributableProcessor.java:220)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:158)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:209)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:147)
>> >> > > at
>> >> > >
>> >> > >
>> >> > > org.seasar.mayaa.impl.engine.processor.ComponentRenderer.renderTemplate(ComponentRenderer.java:70)
>> >> > > at
>> >> > > org.seasar.mayaa.impl.engine.RenderUtil.renderP
>> >
>> >
>> >
>> > --
>> > --
>> > suga ( ko.suga @ gmail.com )
>> >
>> > _______________________________________________
>> > mayaa-user mailing list
>> > mayaa-user @ ml.seasar.org
>> > https://ml.seasar.org/mailman/listinfo/mayaa-user
>>
>>
>>
>> --
>> Susumu ISHIGAMI
>> susumu.ishigami @ gmail.com
>> _______________________________________________
>> mayaa-user mailing list
>> mayaa-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user



-- 
Susumu ISHIGAMI
susumu.ishigami @ gmail.com


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