Review of Servlet Engines and Servlet Plugins

This review is now very old and we encourage third parties to benchmark all the popular HTTP Server and Servlet container combinations.

In early 2000, "iX Magazine" did a testing on 6 servlet engines and servlet plugins. The candidates were:

The article was written by Hendrik Schreiber <hs@tagtraum.com> whose site is http://www.tagtraum.com. Hendrik developed the Jo java WWW server. An update for the latest jetty is included below.

Results:

Results are the max requests per second reached, regardless of the used protocol. FileServlet results were weighed according to a real world distribution, APIMethodTest was only tested with a simple HTTP/1.0 client.
Server FileServlet Content-Length FileServlet no Content-Length HelloWorld Servlet APIMethodTest Servlet
Jetty 2.2.4
189
210
250
175
Jigsaw 2.0.3
181
184
262
137
Java Webserver 2.0
166
152
105
174
JSERV 1.0
93
91
104
99
JRUN PRO 2.3.2
68
72
115
72
Servlet Exec 2.2
54
53
70
67

Servlets:

You will find the source code under: ftp://ftp.heise.de/pub/ix/ix_listings/2000/01/

Clients:

Hardware:

4 clients, 1 server, 1 controller all the same hardware: PII 400MHz, 128Mbyte, Asus P2B, 100Mbit, NT4 SP5

Software:

Sun's JDK 1.2.2 with JIT, restricted to 100 handler threads per machine. Unlike many other vendor benchmarks the test aimed at a high level of concurrency of up to 400 concurrent requests, in order to not only measure isolated, sequential roundtrip times, but a more realistic heavyload situation.

Discussion:

In the end the pure java servers were twice as fast as the plugins. Jetty was the fastest servlet engine (Jigsaw was a bit faster with the "Hello world"). Jigsaw had problems with the URL-rewriting the RequestDispatcher . Every call to encodeURL() did create a session-that leads to a memory hole and the machines crashed. Jetty's implementation of HTTP 1.1 was criticised. IE 5.0 sometimes did not get a response and Pipelining did not work properly. Additionally Jetty wrote some content in the language of the installed JDK, so the tests on the German installation with GET and the "If-Modified" header failed too.

Jetty Update