How to improve a Java build server’s performance

build-serverperformance

We are setting up a new server for integration build. The original integration server can finish the "mvn install" in 3 minutes in a Linux box. Now by moving to a Windows 2012 server on VM, it's down to 9 minutes. The "mvn test" part alone costs 7 minutes. Lots of those tests are following the same pattern: 1. Start a fresh JVM 2. Load test data from files/excel spreadsheets into in-memory database 3. Run queries against that database, validate results

In your opinion, how can we improve this VM's performance? The server already has 16GB of Memory, 256GB of space, 8 vCPUs.

And in general, as a build server, most of work are like this:
1. Read the thousands of files from the workspace,
2. Compile the above source code,
3. Generate thousands of .class files.
4. Jar/Zip these thousands of files.
5. Copy the jars zips files to somewhere else.

These seems more workload on CPU and Disk I/O rather more than RAM, right?

Thanks Jirong

Best Answer

Our build server performance was increased by increasing the disk subsystem performance. We now run 4 fast SSD's in hardware RAID 10.

To confirm disk is your performance bottle neck watch the disk subsystem IO compared to your theoretical and look at the latency because when the latency is constantly high you have a problem.

In Windows you can use Perfmon or Windows Resource Monitor. In Linux use iostat. VMWare vshpere client has graphs on performance tab for disk subsystem.