JBoss Web is a web server and servlet container at the same time. It’s promise is that it can serve static and dynamic content, very fast, without the need of an Apache HTTPD fronting it. If that’s true, its party time, and I personally live for the day where it will be easy to get Java 5 enabled hosting for ~5USD/month (as it is the case today with LAMP stacks).
I’ve decided to give JBoss Web a try, locally, and stress test it against a regular Tomcat. Note that what I did was done for pure fun (and out of curiosity). I do not own a lab, I am definitely not a stress test expert and I do not understand many things at the low level (I/O, threads etc).
- JMeter was used and it was running on the same machine with the servers tested.
- During tests JMeter would use ~30% of cpu, and the server would consume the rest ~70%.
- O/S was Windows XP SP2 on an AMD64 3000+ with 1.5GB ram.
- Java 1.5.0_06 on -server mode for both servers.
- Default installations of JBoss Web 1.0.1 GA and Tomcat 5.5.23 were used.
- -Xms and -Xmx settings were not altered. Don’t think it mattered.
- I stress tested 10 URLs of a very small webapp with a front controller delegating to cached freemarker views. No logging, no persistence or database calls. JBoss’ CONSOLE appender’s threshold was changed to FATAL, to avoid any logging output which would slow down things. The most interesting operations in the webapp would be the GZIP filter, and multipart request using commons fileupload.
- Warm up of the servers was performed. I found out that even for small amount of concurrent threads hitting the server, if these all start immediately, it’s most likely you’ll get some 500s at the beginning. The warm up would be anything between 2500-5000 requests until the server throughput was stabilized.
- When the server was warmed up, I would get my sample from the next 5000-10000 requests.
- The “threads” column in the results table, is the amount of concurrent threads which where hitting the server.
- An http cookie manager was used on JMeter, so 10000 sessions were not being created.
|threads||Tomcat 5.5.23||JBoss Web 1.0.1|
|50||95 requests/sec||88 requests/sec|
|75||105 requests/sec||95 requests/sec|
|100||123 requests/sec||100 requests/sec|
|125||75 requests/sec||104 requests/sec|
at this point I had to increase the maxThreads
|200||62 requests/sec||97 requests/sec|
|300||115 requests/sec||108 requests/sec|
at this point JMeter would block.
[25 seconds per page]
[10 seconds per page]
[13 seconds per page]
at this point JMeter would block
Even this test can be considered rudimentary, JBoss Web looks very good. The biggest problem with the whole procedure is that JMeter was on the same machine as the servers. JMeter supports Remote Testing and Distributed Testing which would have produced more accurate results.
In any case, it was fun.