Hello,
I am testing Fuse Servicemix 4.4 SNAPSHOT with a very simple camel road
embended in a Service Assembly that containing the Camel Service Unit.
Steps of my road are : receiving the request with jetty - changing some
headers - load balance the request to back-ends
Then I am using jmeter for load tests on my road, to improve the capacity of
Servicemix, the back-ends taking nearly 1000 ms to send a response to the
request.
As a result, by generating Thread Dumps, I have found that lots of threads
was waiting for a monitor :
"qtp27080961-446" prio=10 tid=0x083d1400 nid=0x1175 runnable [0x6cff1000]
java.lang.Thread.State: RUNNABLE
at java.lang.SecurityManager.getClassContext(Native Method)
at
java.lang.Exception$SecurityManagerEx.getClassContext(Exception.java:87)
at
java.lang.Exception$SecurityManagerEx.getThrowableContext(Exception.java:92)
at java.lang.Exception. (Exception.java:33)
at java.security.PrivilegedActionException.
(PrivilegedActionException.java:48)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
- locked <0x4ebaf5f0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- locked <0x4ebaf5f0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:502)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.apache.xbean.classloader.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:184)
- locked <0x4f6de7b0> (a
org.apache.xbean.classloader.JarFileClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.apache.xbean.classloader.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:184)
- locked <0x4f6a6f08> (a
org.apache.xbean.classloader.JarFileClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.beans.Introspector.instantiate(Introspector.java:1466)
at
java.beans.PropertyEditorManager.findEditor(PropertyEditorManager.java:104)
- locked <0x662712a0> (a java.lang.Class for
java.beans.PropertyEditorManager)
at
org.apache.camel.impl.converter.PropertyEditorTypeConverter.convertTo(PropertyEditorTypeConverter.java:53)
at
org.apache.camel.impl.converter.PropertyEditorTypeConverter.convertTo(PropertyEditorTypeConverter.java:64)
at
org.apache.camel.impl.converter.DefaultTypeConverter.doConvertTo(DefaultTypeConverter.java:179)
at
org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:94)
at
org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.java:85)
at
org.apache.camel.impl.DefaultMessage.getHeader(DefaultMessage.java:93)
at
org.apache.camel.component.http.DefaultHttpBinding.doWriteResponse(DefaultHttpBinding.java:220)
at
org.apache.camel.component.http.DefaultHttpBinding.writeResponse(DefaultHttpBinding.java:176)
at
org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:104)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at
org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:94)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:421)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:930)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:866)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:337)
at
org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:595)
at
org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1055)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:764)
at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
at
org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:489)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:619)
To prevent from this locked monitor that looks like complaining on
ClassLoader, I have deployed my camel-context.xml file alone on servicemix
without Service Assembly / Service Unit.
As a result, performances are better and the thread locking does not
appearing anymore.
So my question is :
Is that possible to prevent from this thread locking by using Service
Assembly?
**********************
My camel context looks like this:
<!-- ensure that the http client is multithreaded -->
<bean id="http"
class="org.apache.camel.component.http.HttpComponent">
<property name="camelContext" ref="camel"/>
<property name="httpConnectionManager"
ref="myHttpConnectionManager"/>
</bean>
<bean id="myHttpConnectionManager"
class="org.apache.commons.httpclient.MultiThread
<property name="params" ref="myHttpConnectionManagerParams"/>
</bean>
<bean id="myHttpConnectionManagerParams"
class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<property name="defaultMaxConnectionsPerHost" value="5000"/>
</bean>
<!-- trying some jetty configurations -->
<bean id="jetty"
class="org.apache.camel.component.jetty.JettyHttpComponent">
<property name="httpClientMaxThreads" value="1000" />
<property name="httpClientMinThreads" value="10" />
</bean>
<!-- road -->
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="jetty:http://0.0.0.0:9999/webservice/In"/>
<!-- to uri="log:com.sfr?level=INFO"/ -->
<removeHeader headerName="CamelHttpUri" />
<setHeader headerName="Accept-Encoding">
<constant>text/xml</constant>
</setHeader>
<setHeader headerName="CamelHttpQuery">
<constant><![CDATA[additionaldatas=something]]></constant>
</setHeader>
<setHeader headerName="CamelHttpPath">
<constant>mypath</constant>
</setHeader>
<to uri="log:BENCHLIGHT?level=DEBUG" />
<loadBalance ref="roundRobinRef">
<to uri="http:11.112.88.99:12002" />
<to uri="http:11.112.88.99:10266" />
<to uri="http:11.112.22.11:12003" />
<to uri="http:11.112.22.11:14010" />
</loadBalance>
</route>
</camelContext>
<bean id = "roundRobinRef"
class="org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer" />
*************
--
View this message in context:
http://servicemix.396122.n5.nabble.com/Performances-considerations-on-classloader-tp2847760p2847760.html
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.