axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Veithen (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (AXIS2-4629) Poor performance in 1.5.1 due to threads waiting on monitor for synchronized jre method
Date Sat, 27 Nov 2010 15:45:37 GMT

     [ https://issues.apache.org/jira/browse/AXIS2-4629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Andreas Veithen resolved AXIS2-4629.
------------------------------------

    Resolution: Duplicate

The real problem is actually not that the JRE needs to wait to acquire the monitor, but simply
that Axis2 invokes the Introspector every time, while it should actually cache the returned
BeanInfo object. This problem is correctly identified by AXIS2-4878. Therefore I'm closing
the present issue as duplicate.

> Poor performance in 1.5.1 due to threads waiting on monitor for synchronized jre method
> ---------------------------------------------------------------------------------------
>
>                 Key: AXIS2-4629
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4629
>             Project: Axis2
>          Issue Type: Bug
>          Components: adb
>    Affects Versions: 1.5.1
>         Environment: RedHat 5.4, Solaris 10 
>            Reporter: Chris van Es
>            Priority: Critical
>
> We recently upgraded from axis2 1.4.1to 1.5.1 and with no changes to our java methods
which are exposed using axis we have seen a significant drop in performance from around 500-600
TPS to 50 TPS at most. We took a jstack while load is on our system and can see alot of threads
blocked waiting for an object monitor to enter the private method java.beans.Introspector.getPublicDeclaredMethods
in the JRE which is called by axis - stack trace is below. 
> "http-9080-7" daemon prio=10 tid=0x0a95d800 nid=0x2f1d waiting for monitor entry [0xdce76000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at java.beans.Introspector.getPublicDeclaredMethods(Unknown Source)
>         - waiting to lock <0xf0882fa0> (a java.lang.Class for java.beans.Introspector)
>         at java.beans.Introspector.getTargetPropertyInfo(Unknown Source)
>         at java.beans.Introspector.getBeanInfo(Unknown Source)
>         at java.beans.Introspector.getBeanInfo(Unknown Source)
>         at java.beans.Introspector.getBeanInfo(Unknown Source)
>         at org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:132)
>         at org.apache.axis2.databinding.utils.BeanUtil.getPullParser(BeanUtil.java:67)
>         at org.apache.axis2.rpc.receivers.RPCUtil.processResponse(RPCUtil.java:97)
>         at org.apache.axis2.rpc.receivers.RPCUtil.processResponseAsDocLitWrapped(RPCUtil.java:437)
>         at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:138)
>         at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
>         at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
>         at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
>         at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
>         at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Unknown Source)
> From looking at the stack trace it seems like this is called when generating every response
hence the performance hit and having compared the 1.4.1 and 1.5.1 source we can see that the
call to the synchronized JRE method is not made in 1.4.1. This issue is critical to our release
as we expect this interface to have a high throughput.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


Mime
View raw message