[mayaa-user:862] Re: NamespaceImpl#getInstanceのスレッドのロック待ち

AGATA Toshitaka [E-MAIL ADDRESS DELETED]
2009年 9月 30日 (水) 16:47:44 JST


縣です。

本件について続報がありましたので、
ここで共有させていただきます。

まずVMのバージョンを1.5.0系のupdate 21で最新にして運用してみました。
しかし、数日後に同様のデットロックが発生してしまいました。

前回と今回のスレッドダンプをもう一度確認してみたところ、
以下のように「ロックを取得後に再度同じオブジェクトのロックを取得しようと
してロック待ち」という見たことのない状況になっていました。

2回とも同様の現象が同じ箇所で発生していて、その他のスレッドは
すべてロック待ち(NamespaceImpl.getInstance(NamespaceImpl.java:54))に
なっていました。

Mayaaと関係ないかもしれませんが、このような状況というのは発生することが
あるのでしょうか?
もし情報をお持ちの方がいらっしゃいましたら教えてくださいませ。

--------------------------------------------------------------
  Thread dump 1/1 "TP-Processor147" daemon prio=1 tid=0x0968e2e0
nid=0x2d0d runnable [0x7f53b000..0x7f53c120]      at
org.seasar.mayaa.impl.util.ReferenceCache$ReferenceCacheIterator.hasNext(ReferenceCache.java:225)
     - waiting to lock <0x97951860> (a
org.seasar.mayaa.impl.util.ReferenceCache)      at
org.seasar.mayaa.impl.engine.specification.NamespaceImpl.getInstance(NamespaceImpl.java:56)
     - locked <
0x97951860> (a org.seasar.mayaa.impl.util.ReferenceCache)      at
org.seasar.mayaa.impl.engine.specification.NamespaceImpl.copyOf(NamespaceImpl.java:77)
     at
org.seasar.mayaa.impl.engine.specification.SpecificationUtil.copyNamespace(SpecificationUtil.java:311)
     at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.resolvePrefixAll(ElementProcessor.java:203)
     at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.renderInit(ElementProcessor.java:450)
     at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.doStartProcess(ElementProcessor.java:438)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:138)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:155)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderProcessorTree(RenderUtil.java:235)
     at
org.seasar.mayaa.impl.engine.TemplateImpl.doTemplateRender(TemplateImpl.java:151)
     at
org.seasar.mayaa.impl.engine.PageImpl.renderTemplate(PageImpl.java:252)
     at
org.seasar.mayaa.impl.engine.RenderUtil.renderPage(RenderUtil.java:309)
     at
org.seasar.mayaa.impl.engine.PageImpl.doPageRender(PageImpl.java:193)
     at
org.seasar.mayaa.impl.engine.EngineImpl.doPageService(EngineImpl.java:348)
     at
org.seasar.mayaa.impl.engine.EngineImpl.doService(EngineImpl.java:463)
     at
org.seasar.mayaa.impl.MayaaServlet.doService(MayaaServlet.java:86)     
at org.seasar.mayaa.impl.MayaaServlet.doPost(MayaaServlet.java:74)     
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)      at
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)      at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
     at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
     at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
     at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
     at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
     at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
     at
jp.co.nulab.enquete.web.user.fw.filters.ActionFilter.doFilter(ActionFilter.java:54)
     at
jp.co.nulab.enquete.web.user.fw.filters.ActionFilter.doFilter(ActionFilter.java:39)
     at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
     at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
     at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
     at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
     at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
     at
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
     at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
     at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
     at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
     at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
     at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
     at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
     at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
     at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
     at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)     
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
     at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
     at
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
     at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
     at java.lang.Thread.run(Thread.java:595)

(09/09/18 12:32), AGATA Toshitaka wrote:
> sugaさん
> 
> 縣です。
> 
>> 単純に lock 待ちになっているだけなら CPU は使わないでしょうから、
>> 原因は複合的なものではないかと思いますが、ひとまずは VM を新しく
>> してみてはいかがでしょうか。
> 
> 確かにそうですね。
> ひとまずVMやライブラリのバージョンを上げて様子を見てみます。
> いろいろと情報ありがとうございました。
> また何か分かりましたらこちらにご報告させていただきます。
> 
> (09/09/18 9:54), suga さんは書きました:
>> suga です。
>>
>> 2009/9/17 AGATA Toshitaka<[E-MAIL ADDRESS DELETED]>:
>>> Mayaa  1.1.1
>>> org.seasar.mayaa.impl.engine.specification.NamespaceImpl.getInstance(NamespaceImpl.java:54)
>>>          - waiting to lock<0x980649b8>   (a
>>
>> ここのコードでデッドロックになるとは考えにくいですが、148個出ているというのは
>> maxThreads が 150 ならそれらほぼ全部で待っているということでしょうね。
>>
>> 今分かっている情報だけではコード上の問題と思えませんので、
>> VM の方を見てみました。
>>
>> http://java.sun.com/j2se/1.5.0/ReleaseNotes.html
>> Changes in 1.5.0_14
>> Solaris10/T2000 となっていますが、これが近いかもしれません。
>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6525425
>>
>> 単純に lock 待ちになっているだけなら CPU は使わないでしょうから、
>> 原因は複合的なものではないかと思いますが、ひとまずは VM を新しく
>> してみてはいかがでしょうか。
>>
> 
> 


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