lighty's life

lighty developer blog

PRE-RELEASE: lighttpd-1.4.12-20060724-0947.tar.gz

I just uploaded the 3rd pre-release of lighttpd 1.4.12: "www.lighttpd.net/download/lighttpd-1.4.12-20060724-0947.tar.gz"://www.lighttpd.net/download/lighttpd-1.4.12-20060724-0947.tar.gz This pre-release should work on most platforms and it mainly got improvements for our "mongrel":http://mongrel.rubyforge.org/index.html users. A small test has shown that we can even improve the performance of mongrel by balancing over 2 local instances (on a single-cpu machine). I'm using it here against 2 mongrels:
$SERVER["socket"] == ":1446" {
  proxy-core.balancer = "round-robin"
  proxy-core.protocol = "http"
  proxy-core.backends = ( "127.0.0.1:3000", "127.0.0.1:3001" )
}
My small rails app got started with mongrel:
$ RAILS_ENV="production" mongrel_rails start --port 3000
$ RAILS_ENV="production" mongrel_rails start --port 3001
The performance with of the RR-LB was tested with ab, run 3 times:
$ ab -c 20 -n 500 http://127.0.0.1:1446/expenses/
  Requests per second:    22.67 [#/sec] (mean)
  Requests per second:    22.68 [#/sec] (mean)
  Requests per second:    22.97 [#/sec] (mean)
In top the cpu-time was split nicely:
  PID  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
31104 26748  23m 2468 S 42.6  3.4   0:30.09 mongrel_rails
31168 27216  23m 2472 R 40.3  3.4   0:30.10 mongrel_rails
28509  9728 4900 2600 S  5.6  0.7   0:03.91 lighttpd
Against a single mongrel, without lighty, to measure the native performance:
$ ab -c 20 -n 500 http://127.0.0.1:3000/expenses/
  Requests per second:    20.51 [#/sec] (mean)
  Requests per second:    20.42 [#/sec] (mean)
  Requests per second:    20.65 [#/sec] (mean)
Conclusion: 2 mongrels are faster than one (even on a single CPU machine). To get more background on mod_proxy_core check out: * "load-balancers"://blog.lighttpd.net/articles/2006/07/19/hash-balancing-with-mod_proxy_core (hash, fair, rr) * "scheduling in the plugin instead of the kernel"://blog.lighttpd.net/articles/2006/07/15/the-new-mod_proxy_core * fail-over handling * "x-sendfile"://blog.lighttpd.net/articles/2006/07/22/mod_proxy_core-got-x-sendfile-support and "x-rewrite-*"://blog.lighttpd.net/articles/2006/07/22/x-sendfiles-new-friend-x-rewrite * keep-alive for HTTP * HTTP/1.1 * "header-rewriting"://blog.lighttpd.net/articles/2006/07/18/reverse-proxying-mod_proxy_core