Optimizations and in-VM calls
jonlee Jul 2, 2003 2:08 PMWe're currently doing some investigation work on JBoss to get a handle on performance limits.
In some spare time, just wrote a simple test rig to check the performance of calls using the optimized and Trove modified JBoss versus standard JBoss.
The internal VM calls were invoked by 3 parallel threads that had a stateless session bean look itself up and make a single method call (that just returned an incremented counter) - so minimal business logic in the EJB. One thread collected information on JNDI lookups, one performed a call through the local interface (the JNDI lookup is excluded from the measurement, so only create, and call is performed) and the other the same call except using the remote interface (but in VM). Each performed a serial set of 10,000 operations and measured the elapsed time. 10 loops of each were run and the average taken. We set it up this way so that JBoss performed under some sort of load that required multiple operations in parallel.
For the remote calls tests, we had 2 threads from a remote client, 1 performing remote JNDI lookups and the other performing a remote call on the same bean but not at the same time as the in-VM tests. Again 10,000 serial operations and 10 loops. Reported values are the average per operation time.
The results on Win2K, PIII 1.2 GHz with Sun JDK 1.4.1_01
Optimized JBoss 3.2.0 with some Trove and collection modifications in the server branch
IN VM ---------------------------------------------- OUT OF VM
Lookup ------- Loc call ------- Rem call ------- Lookup ------- Rem Call
26 usec ***** 88 usec ****** 95 usec ******* 4.57 msec ** 8.14 msec
Reported memory use by Windows Task Manager: 52,712K
Standard JBoss
IN VM ---------------------------------------------- OUT OF VM
Lookup ------- Loc call ------- Rem call ------- Lookup ------- Rem Call
38 usec ***** 107 usec ***** 111 usec ****** 4.60 msec ** 8.39 msec
Reported memory use by Windows Task Manager: 55,960K
*******************
The results on Linux RedHat 7.2, PII 500 MHz with IBM SDK 1.4.0
Optimized JBoss 3.2.0 with some Trove and collection modifications in the server branch
IN VM ---------------------------------------------- OUT OF VM
Lookup ------- Loc call ------- Rem call ------- Lookup ------- Rem Call
85 usec ***** 308 usec ***** 370 usec ***** 21.36 msec ** 23.94 msec
Reported memory use: VSZ = 177864K, RSS = 128288K
Standard JBoss
IN VM ---------------------------------------------- OUT OF VM
Lookup ------- Loc call ------- Rem call ------- Lookup ------- Rem Call
129 usec **** 334 usec ***** 387 usec **** 21.50 msec ** 24.29 msec
Reported memory use: VSZ = 198816K, RSS = 145768K
If nothing else, this should clearly show why embedded Tomcat/Jetty is better than an externalised Tomcat/Jetty configuration.