HTTP Server Performance

The javaxt-server library is designed for high performance, high concurrency, and low memory usage. We have tested the library using JMeter on a modest, 6 core workstation running Windows 7 (64 bit pro). With a simple echo test, we have seen the server perform over 11,500 requests per second with 50 simultanous clients. CPU utilization is fairly low at about 20% and memory usage remains constant under heavy load. Here's a screen shot from JMeter that illustrates one test run. Click on the image to enlarge.

jmeter

Windows Limitations on the Number of Concurrent Sockets

On my Win7 x64 box, I found that I couldn't get more than 50 simultaneous web requests before encountering TCP/IP errors. On my Win2003 x64 box, I found that I couldn't get more than 250 simultaneous web requests before encountering TCP/IP errors. Turns out, there are limits as to how many concurrent sockets you can have open in Windows. I found this snippit in an O'Reilly publication that sheds some light:

"The operating system stores incoming connection requests addressed to a particular port in a first-in, first-out queue. The default length of the queue is normally 50, though this can vary from operating system to operating system. Some operating systems (though not Solaris) have a maximum queue length, typically five. On these systems, the queue length will be the largest possible value less than or equal to 50. After the queue fills to capacity with unprocessed connections, the host refuses additional connections on that port until slots in the queue open up. Many (though not all) clients will try to make a connection multiple times if their initial attempt is refused." - http://oreilly.com/catalog/javanp2/chapter/ch11.html

I was worried that this is a Java issue so I decided to test a copy of the Apache Http server (written in C I believe). Same results. 50 concurrent requests on Win7 and 250 on Win2003.

After some searching, I found this article. Apparently, the number of concurrent requests can be tweaked on Windows via registry settings. I haven't tried any of these so I don't know whether it actually works or not.