[ https://issues.apache.org/jira/browse/WW-3580?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart resolved WW-3580. ------------------------------- Resolution: Fixed Fix Version/s: 2.3 Done, OGNL 3.0.3 is in Central and you try it out with Struts 2.3.1-SNAPSHOT > Critical performance issue in production environment as thread dumps are > leading to OGNL 3.0 thread blocking! Website could be backed out! > ------------------------------------------------------------------------------------------------------------------------------------------ > > Key: WW-3580 > URL: https://issues.apache.org/jira/browse/WW-3580 > Project: Struts 2 > Issue Type: Bug > Environment: Struts 2.2.1 > Reporter: Shishir Saxena > Assignee: Lukasz Lenart > Priority: Blocker > Fix For: 2.3 > > Attachments: OGNLIssue.zip, > Small_bugfix_on_the_performance_patch_provided_in_WW-3580_.patch, > ognl-synchronization.diff, stacktrace_ognl_issue.txt > > > My web application based on Struts 2.2.1 is using OGNL 3.0. This web > application is rolled into production; however, due to serious performance > considerations the website is in danger of being rolled back. The thread > dumps indicate 'BLOCKING' at > ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:804). > The thread trace is as: > "httpSSLWorkerThread-6357-6" daemon prio=3 tid=0x01a07000 nid=0xa6 > waiting for monitor entry [0xb6d79000..0xb6d7faf0] > java.lang.Thread.State: BLOCKED (on object monitor) > at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:804) > - waiting to lock <0xcca6d328> (a java.lang.reflect.Method) > at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1434) > at > ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:60) > at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:147) > at > com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.getProperty(ObjectAccessor.java:17) > at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2230) > at > com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:137) > at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2230) > at ognl.ASTProperty.getValueBody(ASTProperty.java:114) > at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) > at ognl.SimpleNode.getValue(SimpleNode.java:258) > at ognl.Ognl.getValue(Ognl.java:494) > at ognl.Ognl.getValue(Ognl.java:458) > at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:213) > at > com.opensymphony.xwork2.ognl.OgnlValueStack.getValueUsingOgnl(OgnlValueStack.java:277) > at > com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:260) > at > com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:242) > at > com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:222) > at > com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:284) > at sun.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) > .... > quot;httpSSLWorkerThread-6357-4" daemon prio=3 tid=0x01a56800 nid=0xa4 > runnable [0xb6f79000..0xb6f7fbf0] > java.lang.Thread.State: RUNNABLE > at java.security.AccessController.$$YJP$$doPrivileged(Native Method) > at java.security.AccessController.doPrivileged(AccessController.java) > at > com.sun.enterprise.security.provider.PolicyFile.addPermissions(PolicyFile.java:1333) > at > com.sun.enterprise.security.provider.PolicyFile.getPermissions(PolicyFile.java:1290) > at > com.sun.enterprise.security.provider.PolicyFile.getPermissions(PolicyFile.java:1256) > at > com.sun.enterprise.security.provider.PolicyFile.getPermissions(PolicyFile.java:1198) > at > com.sun.enterprise.security.provider.PolicyFile.implies(PolicyFile.java:1153) > at > com.sun.enterprise.security.provider.BasePolicyWrapper.doImplies(BasePolicyWrapper.java:383) > at > com.sun.enterprise.security.provider.BasePolicyWrapper.implies(BasePolicyWrapper.java:237) > at java.security.ProtectionDomain.implies(ProtectionDomain.java:213) > at > java.security.AccessControlContext.checkPermission(AccessControlContext.java:301) > at java.security.AccessController.checkPermission(AccessController.java:546) > at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) > at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:107) > at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:839) > - locked <0xcca6d328> (a java.lang.reflect.Method) > at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1434) > at > ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:60) > -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira