1 Reply Latest reply on Jan 19, 2007 8:48 PM by javajedi

    How to speed up your remote EJB calls

      I've been doing some profiling of our remote EJB3 invocations, and I just wanted to post and share what I found out. I was able to achieve an average 50% performance boost for our remote calls by changing 1 line in deploy/ejb3.deployer/META-INF/jboss-service.xml:

      Original line:

      <attribute name="InvokerLocator">socket://${jboss.bind.address}:3873</attribute>


      New line:
      <attribute name="InvokerLocator">socket://${jboss.bind.address}:3873/?serializationtype=jboss&socket.check_connection=false</attribute>


      JBoss serialization gives a really nice performance boost. However, I did run into a bug in JBoss AOP when I enabled it. I posted a patch for this at http://jira.jboss.com/jira/browse/JBAOP-347.

      The other change that gave an almost equally impressive boost was the check_connection=false bit. The socket transport sends a 1 byte ping to the server and waits for a 1 byte response before handing the socket back to the client from the pool. So because of this, every remote invocation actually involves 2 round trips by default. Adding this parameter to disable this check shaves a few milliseconds off of each remote call, on average.

      However, this does seem to cause a problem in that, once the socket connection times out (default configuration value is 1 minute), the subsequent remote call fails on the client side, because it tries to reuse the closed socket connection. The call after this is fine because it gets a fresh connection. So to resolve this, I increased the socket connection timeout to 10 minutes (timeout=600000), and created a custom client-side interceptor that wraps the invocation, checks for an IOException, and retries the call once when it happens.

      This seems to be working pretty well, and is significantly faster. If anyone has any suggestions for how to squeeze some more performance out of the transport, or sees anything potentially wrong with what I'm doing, I'd appreciate hearing about it. :)

      --Tim

        • 1. Re: How to speed up your remote EJB calls

          Just a note on the check_connection bit. Glancing at the remoting code, it looks like the check is no longer on by default in JBoss Remoting 2.0. However, the default in 1.4.4 (the latest 1.x release) is still to check first. I tried dropping 2.0 into JBoss, but that was a no-go.