7 Replies Latest reply on Apr 1, 2010 9:55 AM by Hans Wolffenbuttel

    Performance leak in action-pipline?

    Hans Wolffenbuttel Expert

      Hi,

       

      I have build a reasonably simple ESB which does the following:

       

      - deployed actionpipeline as a webservice

      - marshalling XML with JAXB to java objects

      - using wiretap to split message stream:

      A. 1 message is to be distributed over a number of sevices

      B. 1 message keeps on going along the current actionpipeline

       

      A. distribution works fine

       

      B. message should now be converted to a reply and send back.... should...but wont!

       

      On my own system with enough memory and processor capacity it works fine. There is a max delay of 5 seconds before I recieve the reply. But when it is deployed at a busy applicationserver it takes up to more then 20 seconds or even 100 seconds! The funny thing is that the distribution still works fine but without a reply message the sending application keeps getting a time-out,

       

      So the question is: where did I go wrong?

       

      here some code:

       


      {code:xml}

      <jms-jca-provider connection-factory="XAConnectionFactory"

        jndi-context-factory="org.jnp.interfaces.NamingContextFactory"

        jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces"

        name="JMS-JCA-Provider" transacted="true">

        <jms-bus busid="MessageAwareEsbBus">

          <jms-message-filter dest-name="queue/recieve_http_message_esb"

           dest-type="QUEUE" persistent="true" transacted="true"/>

        </jms-bus>

        <jms-bus busid="RecievedMessagesBus">

           <jms-message-filter dest-name="queue/recieve_message_esb"

            dest-type="QUEUE" persistent="true" transacted="true"/>

        </jms-bus>

        ....

        <activation-config>

          <property name="dLQMaxResent" value="99999"/>

        </activation-config>

      </jms-jca-provider>

      {code}

       

      And here the service

      {code:xml}

        <service category="httpgateway"

         description="WS Frontend speaks natively to the ESB" name="MessageService">

         <listeners>

          <jms-listener busidref="MessageAwareEsbBus" is-gateway="false"

           maxThreads="50" name="JMS-ESBListener"/>

         </listeners>

         <actions faultXsd="/bg0204.xsd" inXsd="/bg0204.xsd"

          mep="RequestResponse" outXsd="/bg0204.xsd" validate="true" webservice="true">

          <action

           class="nl.gouwit.esb.actions.TransformMessageAction"

           name="TransformSoapMessageAction" process="prepareMessageForRouting"/>

          <!-- WireTap -->

          <action class="org.jboss.soa.esb.actions.StaticWiretap"

           name="WireTapAction" process="process">

           <property name="destinations">

            <route-to destination-name="queue/recieve_message_esb"

             service-category="MessageRouter" service-name="MessageDistributionService"/>

           </property>

          </action>

          <action

           class="nl.gouwit.esb.actions.TransformMessagAction"

           name="TransformMessageAction" process="replyMessage"/>

         </actions>

        </service>

      {code}

       

      Regards,

       

      Hans

        • 1. Re: Performance leak in action-pipline?
          Hans Wolffenbuttel Expert

          hi,

           

          Just read some earlier posts and it might be an answer to my problem. It seems there is a parameter for maxthreads for the ServiceInvoker which could improve performance of the actionpipeline. The name of the thread is: ServiceInvoker deliverSync too slow...

           

          I will test this and reply if it works or not.

           

          Regards,

           

          Hans


          • 2. Re: Performance leak in action-pipline?
            Hans Wolffenbuttel Expert

            Hi,

             

            Finally came around testing the parameter, but it did nothing for performance. I don't know if I have ajusted the right parameter.

             

            I have adjusted the parameter maxThreads in jbossesb.esb/META-INF/jboss-esb.xml:

             

             

            {code:xml}

                 <service category="JBossESB-Internal"

                            name="InvokerService"

                            description="Service which sends a CommandMessage with operations result">

                        <listeners>

                            <jms-listener name="JMS-DCQListener"

                                        busidref="OperationsResultCollectorQueue"

                                        maxThreads="10"

                            />

                        </listeners>

                        <actions mep="OneWay">

                                <action name="action1"

                                    class="org.jboss.soa.esb.monitoring.client.InvokerAction"

                                    process="invokeOperation"/>

                        </actions>

                 </service>  

            {code}

             

            is this the right one?

             

            Regards,

             

            Hans

            • 3. Re: Performance leak in action-pipline?
              Kevin Conner Master

              That is the correct parameter but you need to add it to your own service rather than an internal one.

               

              That also looks like an old jbossesb.esb configuration, which version are you using?

               

              Kev

              • 4. Re: Performance leak in action-pipline?
                Kevin Conner Master

                From your previous message it looks like you already have the parameter specified as 50.

                 

                There have been numerous performance changes made to the codebase recently, including some through the productisation of 4.7 as SOA 5.  Could you give the current trunk release a try?

                 

                If you can package your test up as a simple example then we can also take a look.

                 

                We are intending on releasing ESB 4.8 later this week, to feed the performance fixes back through the project.

                 

                Kev

                • 5. Re: Performance leak in action-pipline?
                  Hans Wolffenbuttel Expert

                  Hi Kevin,

                   

                  At the moment we have JBoss AS 4.2.3 installed with JBoss ESB 4.6 deployed onto it for our clients. Currently we haven't made the transition to JBoss AS 5 or 6 for that matter. Is this recommendable to upgrade the AS to 5 or 6 for JBoss ESB 4.8 or even a requirement?

                   

                  To come back on the performance problem, the problem is uncovered after installation at one of our clients. It might also be a hardware availability problem. Escpecially because on my local installation I don't experience that much of a problem. We are setting up a test configuration

                  with JBossESB-Server 4.7 to adress the performance issue further. Maybe if 4.8 is released this week we could install that instead of 4.7.

                   

                  The reason I have changed the internal MaxThreads is because I have experienced that the message was being transfered through the ESB but the reply of the pipeline was timing out.

                   

                  Regards,

                   

                  Hans

                  • 6. Re: Performance leak in action-pipline?
                    Kevin Conner Master

                    If you intend to get support through the SOA platform then it would be best to use AS5, however the ESB project runs on both AS4 and AS5.

                     

                    Did you enable the DEBUG logs to see what was happening to your pipeline?  Did this show anything?

                     

                    Kev

                    • 7. Re: Performance leak in action-pipline?
                      Hans Wolffenbuttel Expert

                      Hi Kevin.

                       

                      I did found a development error in the messagerouter I created: I have got an error Unresponsive EPR in the Log which is logical because I didn't create a new message and the response location had the wrong location. I have fixed this, but have not deployed this at a customer yet. So the performance error could also be tied to this problem, however it still is strange that I didn't have any performance trouble with the Unresponsive EPR locally, unless JBoss ESB needs quite a strong hardware setup to preform well. I have 8 GigMB memory and a quad core 2.66 GHz processor. The deployment at the customer was a VMware server, along side other VMware servers. Don't know the specs of their server.

                       

                      Regards,

                       

                      Hans