05 December 2009

Results using a simple Erlang load tester

Having written a minimal load tester in Erlang, the next step was to try producing useful results with it. I downloaded the latest version of Hudson, my favorite continuous integration tool. It comes "pre-loaded" with Winstone, a lightweight server container. What kind of load can Hudson handle? I started by devising a short script. After a random time within the specified range, the client requests a specific page:



Clearly this faster than most users will navigate around Hudson, so this script is something of a worst-case.

I then ran the script 10 times, recording the results:



The red cells in the spreadsheet indicate where Hudson became unresponsive. The red cells containing "10.00" actually did not respond; I added those values for the purpose of making this graph:

Pretty clearly, Hudson is comfortable with up to 9 simultaneous clients. When moving to 12, performance starts to degrade, but is still acceptable. At 15, there were some outright failures. If this Hudson instance is intended to handle more than 12 simultaneous clients, adjustments are necessary.

With a quick look through the log files, I found the problem almost immediately:

Caused by: java.lang.OutOfMemoryError: Java heap space


So it may be pretty easy to increase load capacity for Hudson. Good news - my tiny little script found a problem before my customers did.

In a future post, I'll see what a little parameter tuning does for Hudson load handling.

No comments: