Apache vs. Yaws

Apache and Yaws are web servers.

How well does apache perform against yaws?

The diagram gives the answer.

apache vs yaws

This shows thoughput (KBytes/second) vs. load.

Apache (blue and green) dies when subject to a load of c. 4000 parallel sessions. Yaws (red) works well even when subject to high load.

The red curve is yaws (running on an NFS file system). The blue curve is apache (running on an NFS file system). The green curve is apache (running on a local file system).

What do we measure and how?

We use a 16 node cluster running at SICS. We plot throughput vs. parallel load.


Our figure shows the performance of a server when subject to parallel load. This kind of load is often generated in a so-called "Distributed denial of service attack".

Apache dies at about 4,000 parallel sessions. Yaws is still functioning at over 80,000 parallel connections.

Which version of Apache was used?

We used apache 2.0.39 with the so called worker multi-processing module. For details see http://httpd.apache.org/docs-2.0/mod/worker.htm. This was configured for maximum performance.


I'm speculating here.

The problem with Apache is not related to the Apache code per se but is due to the manner in which the underlying operating system (Linux) implements concurrency. We believe that any system implemented using operating system threads and processes would exhibit similar performance. Erlang does not make use of the underlying OS's threads and processes for managing its own process pool and thus does not suffer from these limitations.

We believe that this effect will be even more dramatic in other operating systems and especially so in systems which generate dynamic content. A performance difference of one to two orders magnitude would not surprise us.


These measurements were performed by Ali Ghodsi with a little help from Joe Armstrong.

emacs logo Valid CSS!