Performance Test Result of Jboss ESB -- Failing for 100 conc
jihanty Nov 21, 2008 9:38 PMI am trying to benchmark performance of JBOSS ESB in a simple test scenario. And 90% of my test cases fail with exception and overall tests are running very slow as well.
Following is my scenario -
SOAP Client ---->jbr listener ---> ESB Actions ----> External Web Service
The external web service is a "echo" service which takes byte[] or a string and returns back the same to the caller. The following is my test scenario -
1. I am using 1 KB of message from SOAP client
2. 100 concurrent users each executing 10 runs of the same test cases
My client is making a synchronous call. I have configured jbr-listener to have 10 threads .
Problem is 90% of my test cases are failing with the following exception. Also overall time to execute the test cases are 10 times slower than actually calling the webservice directly. -
Java exception calling TestRunner
File "C:\Abhijeet\Work\grinder-3.1\examples\jaxrpcpayload.py", line 51, in __call__
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.python.core.PyReflectedFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyInstance.invoke(Unknown Source)
at net.grinder.engine.process.jython.InstrumentedPyJavaInstanceForJavaInstances.access$201(InstrumentedPyJavaInstanceForJavaInstances.java:48)
at net.grinder.engine.process.jython.InstrumentedPyJavaInstanceForJavaInstances$2.call(InstrumentedPyJavaInstanceForJavaInstances.java:93)
at net.grinder.engine.process.TestData$Dispatcher.dispatch(TestData.java:229)
at net.grinder.engine.process.TestData$DispatcherHolder.dispatch(TestData.java:166)
at net.grinder.engine.process.TestData.dispatch(TestData.java:102)
at net.grinder.engine.process.jython.JythonScriptEngine$PyDispatcher.dispatch(JythonScriptEngine.java:463)
at net.grinder.engine.process.jython.InstrumentedPyJavaInstanceForJavaInstances.invoke(InstrumentedPyJavaInstanceForJavaInstances.java:90)
at org.python.pycode._pyx0.__call__$2(C:\Abhijeet\Work\grinder-3.1\examples\jaxrpcpayload.py:51)
at org.python.pycode._pyx0.call_function(C:\Abhijeet\Work\grinder-3.1\examples\jaxrpcpayload.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.invoke(Unknown Source)
at org.python.core.PyInstance.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at net.grinder.engine.process.jython.JythonScriptEngine$JythonWorkerRunnable.run(JythonScriptEngine.java:331)
at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:119)
at java.lang.Thread.run(Thread.java:595)
My question is -
1. Is there some optimized configuration and performance tuning tips that I am missing.
I am putting my jboss-esb.xml for reference here -
============================================
<?xml version = "1.0" encoding = "UTF-8"?>
<jms-provider name="JBossMQ" connection-factory="ConnectionFactory"
jndi-URL="jnp://usphxdlh02.spe.sony.com:1099" jndi-context-factory="org.jnp.interfaces.NamingContextFactory"
jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces">
<jms-bus busid="quickstartGwChannel">
<jms-message-filter
dest-type="QUEUE"
dest-name="queue/eclipse_quickstart_helloworld_Request_gw"
/>
</jms-bus>
<jms-bus busid="quickstartEsbChannel">
<jms-message-filter
dest-type="QUEUE"
dest-name="queue/eclipse_quickstart_helloworld_Request_esb"
/>
</jms-bus>
</jms-provider>
<!-- <jbr-provider name="JBR-Http" protocol="http" host="usphxdlh02.spe.sony.com" >
<jbr-bus busid="Http-1" port="8765" />
</jbr-provider>-->
<jbr-provider name="JBR-Http2" protocol="http" host="usphxdlh02.spe.sony.com" >
<jbr-bus busid="Http-2" port="18765"/>
</jbr-provider>
<!-- <jbr-provider name="JBR-Socket" protocol="socket" host="usphxdlh02.spe.sony.com">
<jbr-bus busid="Socket-1" port="18888" />
</jbr-provider>-->
<jbr-listener name="Http-Gateway"
busidref="Http-2"
maxThreads="10"
is-gateway="true"
/>
<!-- <jbr-listener name="Socket-Gateway" busidref="Socket-1" is-gateway="true" maxThreads="1"/>-->
<jms-listener name="Esb-UnAware" busidref="quickstartGwChannel" maxThreads="10" is-gateway="true"/>
<jms-listener name="Esb-Aware" busidref="quickstartEsbChannel" maxThreads="10" />
<!--
-->
<!--
-->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!--
-->
============================================
Any direction should help..
Thanks
Abhijeet