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.

Reply via email to