Clojure web server shoot-out
Results
- Clojure Google Group discussion: http://goo.gl/xe46R.
- Detailed benchmark results available in
/results/
. - Chart available on Google Docs.
- Margin of error: +/- ~10%.
Pending changes
- None
Configuration
- Macbook Air 1.7GHz Intel Core i5 with 4GB 1333MHz DDR3, running Mac OS X 10.7.5.
- Clojure 1.5.0-RC1 on Oracle JDK7 build 1.7.0_04-b21.
- Response length: 1163 bytes (
servers/index.html
). - ApacheBench Version 2.3 Revision: 1373084. (NB requires upgrade on OS X).
- ApacheBench
ab -n 120000 -c <16,64,92> -rk
. - Leiningen
trampoline
,:jvm-opts ["-server" "-XX:+UseConcMarkSweepGC"]
. - See
scripts/bench.sh
for full details, including OS and TCP tuning. - See
servers/nginx.conf
for nginx config. TODO: Improve. Suggestions? - TODO: Higher concurrency testing: c=200, c=500, c=1000.
Servers
- Jetty Ring adapter - Standard Ring adapter.
- SimpleWeb Ring adapter - Pure-Java HTTP server without using Servlets.
- Netty Ring adapter - Netty adapter for use with Ring.
- http-kit - HTTP client/server with async & WebSockets support.
- Aleph - Clojure framework for asynchronous communication, built on top of Netty and Lamina.
- Aloha - Reference implementation of a Clojure/Netty webserver, or basically Aleph without any extraneous fluff.
- Jetty 7, Jetty 8, Tomcat 7 servlets via lein-servlet.
- nginx 1.2.6.
- TODO: Containers (Jetty, Tomcat, GlassFish), Webbit. More ideas welcome!
Contact & contribution
Welcoming pull-requests for:
- More servers.
- Updated servers (no snapshot releases please!).
- Server / bench config tuning!
Reach me (Peter Taoussanis) at taoensso.com for questions/comments/suggestions/whatever. I'm very open to ideas if you have any! I'm also on Twitter: @ptaoussanis.