You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Patrik Sjöberg (JIRA)" <ji...@apache.org> on 2008/12/03 22:07:36 UTC

[jira] Commented: (WW-2753) Threads are blocked in LocalizedTextUtil.findResourceBundle leading to very bad response times

    [ https://issues.apache.org/struts/browse/WW-2753?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45115#action_45115 ] 

Patrik Sjöberg commented on WW-2753:
------------------------------------

Interesting... 

I have taken over responsibility of an application with struts 2.0.9 and cannot easily move to 2.0.14 (a fix after 2.0.9 with OGNL-syntax). However, my issue is that when running my app under load all of a sudden LocalizedTextUtil.getDefaultText("some.key", Locale.getDefault()) starts giving me null value back. Somehow it seems my resources (in this case I have all my texts in global-messages.properties) are no longer in the application scope.  The only thing is to restart tomcat... Very bad of course! The application is written with singleton (spring) action beans (yuck, but not my fault).

I have also only run with devmode set to true and will try to run with devmode set to false tomorrow to see if that might save my day...

> Threads are blocked in LocalizedTextUtil.findResourceBundle leading to very bad response times
> ----------------------------------------------------------------------------------------------
>
>                 Key: WW-2753
>                 URL: https://issues.apache.org/struts/browse/WW-2753
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.0.11.1, 2.1.2
>         Environment: RHEL3 with apache2.0 and tomcat 6.0.13, with an average load of 30-40 req per sec. We are using struts 2.0.11.1, xwork2.0.4,tiles 2.0.6.freemarker2.3.13.
>            Reporter: kirti teja
>            Priority: Critical
>
> we have encountered a production incident of very slow response times over 5 mins per page.  Investagtion lead to understanding that a huge number of threads are getting blocked on a synchronised block in LocalizedTextUtil.findResourceBundle. Attached is the below stack trace. We have encoutnered this with two different products in our company.
> "TP-Processor678" daemon prio=10 tid=0x5c5aa1d8 nid=0x4959 waiting for monitor entry [0x52fac000..0x52fae6f0]
>    java.lang.Thread.State: BLOCKED (on object monitor)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findResourceBundle(LocalizedTextUtil.java:218)
> 	- waiting to lock <0x67db2650> (a java.util.HashMap)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.getMessage(LocalizedTextUtil.java:602)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:643)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:689)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:360)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:293)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:173)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:88)
> 	at com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:71)
> 	at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)
> 	at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1253)
> 	at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
> 	at com.opensymphony.xwork2.util.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:81)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1305)
> 	at com.opensymphony.xwork2.util.CompoundRootAccessor.callMethod(CompoundRootAccessor.java:196)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.ASTMethod.getValueBody(ASTMethod.java:90)
> 	at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
> 	at ognl.SimpleNode.getValue(SimpleNode.java:258)
> 	at ognl.Ognl.getValue(Ognl.java:494)
> 	at com.opensymphony.xwork2.util.OgnlUtil.getValue(OgnlUtil.java:194)
> 	at com.opensymphony.xwork2.util.OgnlValueStack.findValue(OgnlValueStack.java:238)
> 	at org.apache.struts2.components.Property.start(Property.java:136)
> 	at org.apache.struts2.views.freemarker.tags.CallbackWriter.onStart(CallbackWriter.java:72)
> 	at freemarker.core.Environment.visit(Environment.java:294)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.visit(Environment.java:297)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.process(Environment.java:188)
> 	at freemarker.template.Template.process(Template.java:237)
> 	at org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:168)
> 	at org.apache.struts2.tiles.StrutsTilesRequestContext.include(StrutsTilesRequestContext.java:118)
> "TP-Processor677" daemon prio=10 tid=0x5c823708 nid=0x4958 waiting for monitor entry [0x538fd000..0x538ff670]
>    java.lang.Thread.State: BLOCKED (on object monitor)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findResourceBundle(LocalizedTextUtil.java:218)
> 	- waiting to lock <0x67db2650> (a java.util.HashMap)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.getMessage(LocalizedTextUtil.java:602)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:393)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:293)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:173)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:88)
> 	at com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:71)
> 	at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)
> 	at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1253)
> 	at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
> 	at com.opensymphony.xwork2.util.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:81)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1305)
> 	at com.opensymphony.xwork2.util.CompoundRootAccessor.callMethod(CompoundRootAccessor.java:196)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.ASTMethod.getValueBody(ASTMethod.java:90)
> 	at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
> 	at ognl.SimpleNode.getValue(SimpleNode.java:258)
> 	at ognl.Ognl.getValue(Ognl.java:494)
> 	at com.opensymphony.xwork2.util.OgnlUtil.getValue(OgnlUtil.java:194)
> 	at com.opensymphony.xwork2.util.OgnlValueStack.findValue(OgnlValueStack.java:238)
> 	at org.apache.struts2.components.Property.start(Property.java:136)
> 	at org.apache.struts2.views.freemarker.tags.CallbackWriter.onStart(CallbackWriter.java:72)
> 	at freemarker.core.Environment.visit(Environment.java:294)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.visit(Environment.java:297)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.process(Environment.java:188)
> 	at freemarker.template.Template.process(Template.java:237)
> 	at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:148)
> 	at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:530)
> 	at org.apache.struts2.components.UIBean.end(UIBean.java:484)
> 	at org.apache.struts2.views.freemarker.tags.CallbackWriter.afterBody(CallbackWriter.java:83)
> 	at freemarker.core.Environment.visit(Environment.java:299)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.visit(Environment.java:297)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.process(Environment.java:188)
> 	at freemarker.template.Template.process(Template.java:237)
> 	at org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:168)
> "TP-Processor572" daemon prio=10 tid=0x5e507a48 nid=0x3730 waiting for monitor entry [0x563fd000..0x563ff5f0]
>    java.lang.Thread.State: BLOCKED (on object monitor)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findResourceBundle(LocalizedTextUtil.java:218)
> 	- locked <0x67db2650> (a java.util.HashMap)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.getMessage(LocalizedTextUtil.java:602)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:661)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:689)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:689)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:689)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findMessage(LocalizedTextUtil.java:689)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:360)
> 	at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:293)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:173)
> 	at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:88)
> 	at com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:71)
> 	at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)
> 	at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1253)
> 	at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
> 	at com.opensymphony.xwork2.util.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:81)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1305)
> 	at com.opensymphony.xwork2.util.CompoundRootAccessor.callMethod(CompoundRootAccessor.java:196)
> 	at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)
> 	at ognl.ASTMethod.getValueBody(ASTMethod.java:90)
> 	at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
> 	at ognl.SimpleNode.getValue(SimpleNode.java:258)
> 	at ognl.Ognl.getValue(Ognl.java:494)
> 	at com.opensymphony.xwork2.util.OgnlUtil.getValue(OgnlUtil.java:194)
> 	at com.opensymphony.xwork2.util.OgnlValueStack.findValue(OgnlValueStack.java:238)
> 	at org.apache.struts2.components.Property.start(Property.java:136)
> 	at org.apache.struts2.views.freemarker.tags.CallbackWriter.onStart(CallbackWriter.java:72)
> 	at freemarker.core.Environment.visit(Environment.java:294)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.visit(Environment.java:297)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.process(Environment.java:188)
> 	at freemarker.template.Template.process(Template.java:237)
> 	at org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:168)
> 	at org.apache.struts2.tiles.StrutsTilesRequestContext.include(StrutsTilesRequestContext.java:118)
> 	at org.apache.struts2.tiles.StrutsTilesRequestContext.dispatch(StrutsTilesRequestContext.java:84)
> 	at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:457)
> 	at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:140)
> 	at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:117)
> 	at org.apache.tiles.jsp.taglib.RenderTagSupport.execute(RenderTagSupport.java:171)
> 	at org.apache.tiles.jsp.taglib.RoleSecurityTagSupport.doEndTag(RoleSecurityTagSupport.java:75)
> 	at org.apache.tiles.jsp.taglib.ContainerTagSupport.doEndTag(ContainerTagSupport.java:80)
> 	at freemarker.ext.jsp.TagTransformModel$TagWriter.endEvaluation(TagTransformModel.java:431)
> 	at freemarker.ext.jsp.TagTransformModel$TagWriter.afterBody(TagTransformModel.java:407)
> 	at freemarker.core.Environment.visit(Environment.java:299)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.visit(Environment.java:297)
> 	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
> 	at freemarker.core.Environment.visit(Environment.java:208)
> 	at freemarker.core.Environment.process(Environment.java:188)
> 	at freemarker.template.Template.process(Template.java:237)
> 	at org.apache.struts2.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:168)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.