From 02a116c0d94a60a64abf8ad2465132e8194dd62a Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 29 Apr 2011 16:01:35 -0700 Subject: TUNING: document worker_processes tuning It seems people are still confused about it... --- TUNING | 30 ++++++++++++++++++++++-------- lib/unicorn/configurator.rb | 2 ++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/TUNING b/TUNING index 0964552..d269b43 100644 --- a/TUNING +++ b/TUNING @@ -1,13 +1,32 @@ -= Tuning Unicorn += Tuning \Unicorn -Unicorn performance is generally as good as a (mostly) Ruby web server +\Unicorn performance is generally as good as a (mostly) Ruby web server can provide. Most often the performance bottleneck is in the web application running on Unicorn rather than Unicorn itself. -== Unicorn Configuration +== \Unicorn Configuration See Unicorn::Configurator for details on the config file format. +=== Unicorn::Configurator#worker_processes + +* worker_processes should be scaled to the number of processes your + backend system(s) can support. DO NOT scale it to the number of + external network clients your application expects to be serving. + \Unicorn is NOT for serving slow clients, that is the job of nginx. + +* worker_processes should be *at* *least* the number of CPU cores on + a dedicated server. If your application has occasionally slow + responses that are /not/ CPU-intensive, you may increase this to + workaround those inefficiencies. + +* worker_processes may be increased for Unicorn::OobGC users to provide + more consistent response times. + +* Never, ever, increase worker_processes to the point where the system + runs out of physical memory and hits swap. Production servers should + never see heavy swap activity. + * Setting a very low value for the :backlog parameter in "listen" directives can allow failover to happen more quickly if your cluster is configured for it. @@ -42,11 +61,6 @@ See Unicorn::Configurator for details on the config file format. have them unbuffered (File#sync = true) or they are record(line)-buffered in userspace before any writes. -* worker_processes should be scaled to the number of processes your - backend system(s) can support. DO NOT scale it to the number of - external network clients your application expects to be serving. - Unicorn is NOT for serving slow clients, that is the job of nginx. - == Kernel Parameters (Linux sysctl) WARNING: Do not change system parameters unless you know what you're doing! diff --git a/lib/unicorn/configurator.rb b/lib/unicorn/configurator.rb index bed3abe..b6ad022 100644 --- a/lib/unicorn/configurator.rb +++ b/lib/unicorn/configurator.rb @@ -8,6 +8,8 @@ require 'logger' # example configuration files. An example config file for use with # nginx is also available at # http://unicorn.bogomips.org/examples/nginx.conf +# +# See the link:/TUNING.html document for more information on tuning unicorn. class Unicorn::Configurator include Unicorn -- cgit v1.2.3-24-ge0c7