[mayaa-user:881] mayaa1.1.19でスレッドロックが発生する現象について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 1月 13日 (水) 09:22:23 JST


佐々木と申します。

mayaaのソースPageImpl.javaの140行目(下記プログラム1)の部分で、アプリケーションの全てのスレッドが停止してしまう現象が発生しました。
スレッドが止まった大元は、下記スレッドダンプ1、スレッドダンプ2の内容から、EngineImpl.javaの609行目で止まっている旨のスレッドダンプが出てました。

1年以上運用しているアプリケーションで、ライブラリのアップデートも行っていませんが、障害が内存していたのかと思いますが最近の一ヶ月で2回同障害が発生しました。

本障害を解消するための方法はありますでしょうか?
mayaa+HTMLの書き方に起因しているとか、ライブラリのアップデートで解消できるなど、情報がありましたらご教示ください。
よろしくお願いいたします。

[環境]
・Weblogic9.2MP2
・S2 2.3.17 + S2Struts 1.2.9 + mayaa1.1.19

■プログラム1
org/seasar/mayaa/impl/engine/PageImpl#getTemplateFromFixedSuffix (PageImpl.java:140)

134     protected Template getTemplateFromFixedSuffix( 
135             String suffix, String extension) { 
136         if (suffix == null || extension == null) { 
137             throw new IllegalArgumentException(); 
138         } 
139         Engine engine = ProviderUtil.getEngine(); 
140         synchronized (engine) {
141             String systemID = engine.getTemplateID(this, suffix, extension); 
142             Template template = findTemplateFromCache(systemID); 
143             if (template != null) { 
144                 if (template.getSource().exists()) { 
145                     return template; 
146                 } 
147                 return null; 
148             } 
149             return engine.createTemplateInstance(this, suffix, extension); 
150         } 
151     } 

■プログラム2
org/seasar/mayaa/impl/engine/EngineImpl.getTemplateID(EngineImpl.java:609)

608     public String getTemplateID(Page page, String suffix, String extension) { 
609         StringBuffer name = new StringBuffer(page.getPageName());
610         if (StringUtil.hasValue(suffix)) { 
611             String separator = getSuffixSeparator(); 
612             name.append(separator).append(suffix); 
613         } 
614         if (StringUtil.hasValue(extension)) { 
615             name.append(".").append(extension); 
616         } 
617         return name.toString(); 
618     } 


■スレッドダンプ1 - スレッド77が原因でスレッドが停止しているメッセージ(ExecuteThread: '8'の内容は下記スレッドダンプ3にあり)

Chain 8:
"[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'" id=73 idx=0xac tid=23579 waiting for org/seasar/mayaa/impl/engine/[E-MAIL ADDRESS DELETED] held by:
"[STUCK] ExecuteThread: '77' for queue: 'weblogic.kernel.Default (self-tuning)'" id=338 idx=0x1b4 tid=409 in chain 5


■スレッドダンプ2 - 止まっているスレッド

"[STUCK] ExecuteThread: '77' for queue: 'weblogic.kernel.Default (self-tuning)'" id=338 idx=0x1b4 tid=409 prio=1 alive, in native, native_blocked, daemon
    at jrockit/vm/Allocator.nativeGetNewTLA()I(Native Method)
    at jrockit/vm/Allocator.getNewTLAAndAlloc(IIIZ)Ljava/lang/Object;(Unknown Source)[optimized]
    at jrockit/vm/Allocator.prepareNextChunkAndAlloc(IIII)Ljava/lang/Object;(Unknown Source)[inlined]
    at jrockit/vm/Allocator.getMoreMemoryAndAlloc(IIIIZ)Ljava/lang/Object;(Unknown Source)[optimized]
    at java/lang/AbstractStringBuilder.<init>(AbstractStringBuilder.java:44)[inlined]
    at java/lang/StringBuffer.<init>(StringBuffer.java:104)[inlined]
    at org/seasar/mayaa/impl/engine/EngineImpl.getTemplateID(EngineImpl.java:609)[optimized]
    at org/seasar/mayaa/impl/engine/PageImpl.getTemplateFromFixedSuffix(PageImpl.java:141)[optimized]
    ^-- Holding lock: org/seasar/mayaa/impl/engine/[E-MAIL ADDRESS DELETED][fat lock]
    at org/seasar/mayaa/impl/engine/PageImpl.getTemplate(PageImpl.java:163)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.getTemplate(RenderUtil.java:298)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderPage(RenderUtil.java:333)[inlined]
    at org/seasar/mayaa/impl/engine/processor/InsertProcessor.doStartProcess(InsertProcessor.java:327)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:134)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderProcessorTree(RenderUtil.java:263)[inlined]
    at org/seasar/mayaa/impl/engine/TemplateImpl.doTemplateRender(TemplateImpl.java:203)[optimized]
    at org/seasar/mayaa/impl/engine/PageImpl.renderTemplate(PageImpl.java:242)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderPage(RenderUtil.java:348)[inlined]
    at org/seasar/mayaa/impl/engine/PageImpl.doPageRender(PageImpl.java:190)[optimized]
    at org/seasar/mayaa/impl/engine/EngineImpl.doPageService(EngineImpl.java:368)[optimized]
    at org/seasar/mayaa/impl/engine/EngineImpl.doService(EngineImpl.java:490)[optimized]
    at org/seasar/mayaa/impl/MayaaServlet.doService(MayaaServlet.java:97)[inlined]
    at jp/co/****/*******/core/MayaaServletEx.doService(MayaaServletEx.java:56)[inlined]
    at org/seasar/mayaa/impl/MayaaServlet.doGet(MayaaServlet.java:80)[inlined]
    at jp/co/****/*******/core/MayaaServletEx.doGet(MayaaServletEx.java:42)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:743)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:856)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)[inlined]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:283)[optimized]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175)[inlined]
    at weblogic/servlet/internal/RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)[optimized]
    at weblogic/servlet/internal/RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)[optimized]
    at jp/co/****/*******/common/urlconv/ReplaceTextFilter.doFilter(ReplaceTextFilter.java:330)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/extension/filter/EncodingFilter.doFilter(EncodingFilter.java:62)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/struts/filter/S2StrutsFilter.doFilter(S2StrutsFilter.java:42)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/framework/container/filter/S2ContainerFilter.doFilter(S2ContainerFilter.java:60)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at jp/co/****/*******/accesslog/AccessLogCollector.doFilter(AccessLogCollector.java:378)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[inlined]
    at weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3229)[optimized]
    at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)[optimized]
    at weblogic/security/service/SecurityManager.runAs(SecurityManager.java:121)[inlined]
    at weblogic/servlet/internal/WebAppServletContext.securedExecute(WebAppServletContext.java:2002)[inlined]
    at weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java:1908)[optimized]
    at weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1362)[optimized]
    at weblogic/work/ExecuteThread.execute(ExecuteThread.java:209)[optimized]
    at weblogic/work/ExecuteThread.run(ExecuteThread.java:181)[optimized]
    at jrockit/vm/RNI.c2java(IIII)V(Native Method)
    -- end of trace


■スレッドダンプ3 - スレッド77によってロックされているスレッド

"[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'" id=73 idx=0xac tid=23579 prio=1 alive, in native, blocked, daemon
    -- Blocked trying to get lock: org/seasar/mayaa/impl/engine/[E-MAIL ADDRESS DELETED][fat lock]
    at jrockit/vm/Threads.waitForSignal(J)Z(Native Method)
    at jrockit/vm/Locks.fatLockBlockOrSpin(ILjrockit/vm/ObjectMonitor;II)Z(Unknown Source)[optimized]
    at jrockit/vm/Locks.lockFat(Ljava/lang/Object;ILjrockit/vm/ObjectMonitor;Z)Ljava/lang/Object;(Unknown Source)[optimized]
    at jrockit/vm/Locks.monitorEnterSecondStage(Ljava/lang/Object;I)Ljava/lang/Object;(Unknown Source)[optimized]
    at org/seasar/mayaa/impl/engine/PageImpl.getTemplateFromFixedSuffix(PageImpl.java:140)[optimized]
    at org/seasar/mayaa/impl/engine/PageImpl.getTemplate(PageImpl.java:163)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.getTemplate(RenderUtil.java:298)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderPage(RenderUtil.java:333)[inlined]
    at org/seasar/mayaa/impl/engine/processor/InsertProcessor.doStartProcess(InsertProcessor.java:327)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:134)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessorChildren(RenderUtil.java:208)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:147)[inlined]
    at org/seasar/mayaa/impl/engine/processor/ComponentRenderer.renderTemplate(ComponentRenderer.java:70)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderPage(RenderUtil.java:348)[inlined]
    at org/seasar/mayaa/impl/engine/processor/InsertProcessor.doStartProcess(InsertProcessor.java:327)[optimized]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderTemplateProcessor(RenderUtil.java:134)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderProcessorTree(RenderUtil.java:263)[inlined]
    at org/seasar/mayaa/impl/engine/TemplateImpl.doTemplateRender(TemplateImpl.java:203)[optimized]
    at org/seasar/mayaa/impl/engine/PageImpl.renderTemplate(PageImpl.java:242)[inlined]
    at org/seasar/mayaa/impl/engine/RenderUtil.renderPage(RenderUtil.java:348)[inlined]
    at org/seasar/mayaa/impl/engine/PageImpl.doPageRender(PageImpl.java:190)[optimized]
    at org/seasar/mayaa/impl/engine/EngineImpl.doPageService(EngineImpl.java:368)[optimized]
    at org/seasar/mayaa/impl/engine/EngineImpl.doService(EngineImpl.java:490)[optimized]
    at org/seasar/mayaa/impl/MayaaServlet.doService(MayaaServlet.java:97)[inlined]
    at jp/co/****/*******/core/MayaaServletEx.doService(MayaaServletEx.java:56)[inlined]
    at org/seasar/mayaa/impl/MayaaServlet.doGet(MayaaServlet.java:80)[inlined]
    at jp/co/****/*******/core/MayaaServletEx.doGet(MayaaServletEx.java:42)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:743)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:856)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)[inlined]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:283)[optimized]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175)[inlined]
    at weblogic/servlet/internal/RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)[optimized]
    at weblogic/servlet/internal/RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)[optimized]
    at org/apache/struts/action/RequestProcessor.doForward(RequestProcessor.java:1085)[inlined]
    at org/seasar/struts/processor/S2RequestProcessor.doForward(S2RequestProcessor.java:249)[inlined]
    at org/apache/struts/action/RequestProcessor.processForwardConfig(RequestProcessor.java:398)[inlined]
    at org/seasar/struts/processor/S2RequestProcessor.processForwardConfig(S2RequestProcessor.java:147)[optimized]
    at org/seasar/struts/processor/AcceptorImpl.process(AcceptorImpl.java:139)[optimized]
    at org/seasar/struts/processor/S2RequestProcessor.process(S2RequestProcessor.java:61)[inlined]
    at jp/co/****/*******/core/S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2.process$$invokeSuperMethod$$(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2.java)[inlined]
    at jp/co/****/*******/core/S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2$$MethodInvocation$$process0.proceed()Ljava/lang/Object;(MethodInvocationClassGenerator.java)[optimized]
    at org/seasar/framework/aop/impl/NestedMethodInvocation.proceed(NestedMethodInvocation.java:45)[optimized]
    at jp/co/****/*******/common/aop/SessionTimeoutCheckInterceptor.invoke(SessionTimeoutCheckInterceptor.java:104)[optimized]
    at org/seasar/framework/aop/impl/NestedMethodInvocation.proceed(NestedMethodInvocation.java:43)[inlined]
    at org/seasar/framework/aop/interceptors/InterceptorAdapter.invoke(InterceptorAdapter.java:54)[optimized]
    at jp/co/****/*******/core/S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2$$MethodInvocation$$process0.proceed()Ljava/lang/Object;(MethodInvocationClassGenerator.java)[inlined]
    at jp/co/****/*******/core/S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(S2RequestProcessorEx$$EnhancedByS2AOP$$1276db2.java)[optimized]
    at org/apache/struts/action/ActionServlet.process(ActionServlet.java:1196)[inlined]
    at org/apache/struts/action/ActionServlet.doGet(ActionServlet.java:414)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:743)[optimized]
    at javax/servlet/http/HttpServlet.service(HttpServlet.java:856)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)[optimized]
    at weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)[inlined]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:283)[optimized]
    at weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175)[inlined]
    at weblogic/servlet/internal/RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)[optimized]
    at weblogic/servlet/internal/RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)[optimized]
    at jp/co/****/*******/common/urlconv/ReplaceTextFilter.doFilter(ReplaceTextFilter.java:354)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/extension/filter/EncodingFilter.doFilter(EncodingFilter.java:62)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/struts/filter/S2StrutsFilter.doFilter(S2StrutsFilter.java:42)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at org/seasar/framework/container/filter/S2ContainerFilter.doFilter(S2ContainerFilter.java:60)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[optimized]
    at jp/co/****/*******/accesslog/AccessLogCollector.doFilter(AccessLogCollector.java:378)[optimized]
    at weblogic/servlet/internal/FilterChainImpl.doFilter(FilterChainImpl.java:42)[inlined]
    at weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3229)[optimized]
    at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)[optimized]
    at weblogic/security/service/SecurityManager.runAs(SecurityManager.java:121)[inlined]
    at weblogic/servlet/internal/WebAppServletContext.securedExecute(WebAppServletContext.java:2002)[inlined]
    at weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java:1908)[optimized]
    at weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1362)[optimized]
    at weblogic/work/ExecuteThread.execute(ExecuteThread.java:209)[optimized]
    at weblogic/work/ExecuteThread.run(ExecuteThread.java:181)
    at jrockit/vm/RNI.c2java(IIII)V(Native Method)
    -- end of trace


以上



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