I thought my results tonight were quite interesting. I setup a new server for a client and, due to my recent woes, went straight to performance testing. 🙂 Since I LOVE numbers [data], it was appealing to me to test the server every step of the way to set some informal “benchmarks” for the starting point moving forward.

These performance tests were done with Siege by Joe Dog Software. I think it is it a great piece of software and highly recommend it for performance testing.

Server:
Media Temple (ve) 1GB
Ubuntu 11.04 Natty
Apache 2.2 [prefork MPM]

Siege command:

siege http://server-ip-here/index.cfm -c 100 -t 60s

This is a 100 concurrent user test for 60 seconds on the index.cfm page of the site. Enough details…on to the results.


I did the results each step of the way so each section will be labeled with the tech involved.

Raw Apache [no tomcat/railo]

Lifting the server siege...      done.
Transactions:		        8035 hits
Availability:		      100.00 %
Elapsed time:		       59.99 secs
Data transferred:	        1.12 MB
Response time:		        0.16 secs
Transaction rate:	      133.94 trans/sec
Throughput:		        0.02 MB/sec
Concurrency:		       21.91
Successful transactions:        8035
Failed transactions:	           0
Longest transaction:	        7.59
Shortest transaction:	        0.09

Apache w/ Tomcat 6 and Railo 3.2

This one I did my typical ColdFusion code to confirm an install works:

#dateformat(now(), "long")#
Lifting the server siege...      done.
Transactions:		        7418 hits
Availability:		      100.00 %
Elapsed time:		       59.23 secs
Data transferred:	       22.92 MB
Response time:		        0.20 secs
Transaction rate:	      125.24 trans/sec
Throughput:		        0.39 MB/sec
Concurrency:		       25.58
Successful transactions:        7418
Failed transactions:	           0
Longest transaction:	        3.75
Shortest transaction:	        0.10

Apache w/ Tomcat and Railo 3.2.2.000 – EHCache Lite

I won’t dig into the specific cache settings but most are pretty much the default values with the idle and TTL changed on each cache type. I also reverted the code from being CF code to the same simple text the default Apache install uses: It Worked!

Lifting the server siege...      done.
Transactions:		        7760 hits
Availability:		      100.00 %
Elapsed time:		       59.87 secs
Data transferred:	       23.98 MB
Response time:		        0.22 secs
Transaction rate:	      129.61 trans/sec
Throughput:		        0.40 MB/sec
Concurrency:		       28.14
Successful transactions:        7760
Failed transactions:	           0
Longest transaction:	        5.09
Shortest transaction:	        0.10

Apache w/ Tomcat and Railo 3.3.0.022 – EHCache Lite

It is important to note the 3.3 build is a preview release so this was purely done out of curiosity. Oh and this is the same “It worked!” page.

Lifting the server siege...      done.
Transactions:		        7956 hits
Availability:		       99.99 %
Elapsed time:		       59.83 secs
Data transferred:	       22.86 MB
Response time:		        0.24 secs
Transaction rate:	      132.98 trans/sec
Throughput:		        0.38 MB/sec
Concurrency:		       31.72
Successful transactions:        7956
Failed transactions:	           1
Longest transaction:	        4.17
Shortest transaction:	        0.10

Conclusion

Wow! I can’t believe the 3.3 server is at 99.016801% of raw Apache. The max CPU I saw was about 10% during one of the earlier tests. During the last test the CPU didn’t budge. I thought something was wrong or the test was over but it was still humming away. Sweet stuff!

Of course as I put the site files here the performance will decrease, as expected, but with caching, proper indexes for my db queries, and good coding…this server could hum! If it starts getting bogged down, MediaTemple makes it bonehead easy to upgrade the RAM all the way to 16GB. Any needs after that and it is…”to the cloud!” 😀

My next steps are to nix the prefork MPM in Apache and solely use the worker MPM [mutli-threaded]. I’ll then run the test again to see how it performs in comparison to the final results above and maybe do some solid CPU monitoring vs my highly scientific approach of watching the top command. lol.

What do you think? Good or bad results? How can it get better?

Disclaimer

I did not restart the server or Apache/Tomcat between tests so they are not clean tests. This is a really raw look at how well the server performs throughout the configuration process.

Also, I’m no performance test or server guru. I’d love to hear some of the ways other people best utilize all of the sweet server testing goodness.