Erlang Web Server Benchmarks
Over the last few weeks I’ve been writing a server side web application framework for Erlang. Essentially, I looked at various available erlang frameworks like WebMachine, Nitrogen, BeepBeep, Yaws, ErlyWeb etc. and pulled out and assembled my own little framework with features I needed. I’ve also been writing an Erlang library for encoding/decoding AMF which will help me add some interesting Flash/Flex specific features to this framework.
Among other things this framework provides web server library specific request/response format abstraction similar to SimpleBridge, A Django templates implementation using ErlyDTL, an MVC implementation inspired from ErlyWeb and a lot more. Even with all this functionality I’m quite happy with the performance we’re able to achieve, so I thought I’d share some benchmarks with everyone.
Since the framework completely abstracts out the web server library used, I was able to try out various web options, but I think we’ll stick with Misultin for our production enviornment since it seems to perform significantly better than other implementations. Here are the results of running AutoBench on our framework powered by Misultin.
The server was running on an m1.large amazon instance running ubuntu and the tests was run from an m1.small amazon instance.
$ autobench --single_host --host1 xyz.com --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 100 -num_conn 5000 --timeout 5 --file results.tsv

Here are some more tests using a different tool Apache Bench
$ ab -k -n 500000 -c 1000 http://xyz.com/
Document Path: /
Document Length: 27 bytes
Concurrency Level: 1000
Time taken for tests: 39.937 seconds
Complete requests: 500000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 500000
Total transferred: 57510350 bytes
HTML transferred: 13502430 bytes
Requests per second: 12519.82 [#/sec] (mean)
Time per request: 79.873 [ms] (mean)
Time per request: 0.080 [ms] (mean, across all concurrent requests)
Transfer rate: 1406.29 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 71.8 0 3005
Processing: 1 78 25.9 77 732
Waiting: 1 78 25.9 77 732
Total: 1 80 79.3 77 3427
Percentage of the requests served within a certain time (ms)
50% 77
66% 87
75% 94
80% 98
90% 110
95% 119
98% 132
99% 144
100% 3427 (longest request)
Running the ab test without the keep alive (-k) option, causes the request rate to fall drastically to around the 3600 r/sec level but looking at the Tornado performance tests here, 3600 seems reasonably good. I haven’t tried adding nginx similar to that Tornado setup, not sure if that would help.









February 24th, 2010
why erlang-web.org is not included? its one of the fastest.
February 25th, 2010
@asdasd
Erlang Web is very nice, but its a framework and not a webserver, it uses Yaws or INETS as the webserver.
I;m writing my own framework for my own needs so I was only comparing performance of webserver modules … YAWS and INETS did not seem to perform as well as Misultin.
Thanks,
Mrinal