From 066bbf930d023ecf61ed4af363aebadbce2c51db Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 8 Apr 2011 13:38:11 -0700 Subject: http_server: attempt to increase RLIMIT_NOFILE In case people try to do C10K, make life easier for them. --- lib/rainbows/http_server.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'lib/rainbows/http_server.rb') diff --git a/lib/rainbows/http_server.rb b/lib/rainbows/http_server.rb index 6d704f4..21c5a05 100644 --- a/lib/rainbows/http_server.rb +++ b/lib/rainbows/http_server.rb @@ -48,6 +48,32 @@ class Rainbows::HttpServer < Unicorn::HttpServer orig == m ? super(worker) : worker_loop(worker) end + def spawn_missing_workers + # 5: std{in,out,err} + heartbeat FD + per-process listener + nofile = 5 + @worker_connections + LISTENERS.size + trysetrlimit(:RLIMIT_NOFILE, nofile) + super + end + + def trysetrlimit(resource, want) + var = Process.const_get(resource) + cur, max = Process.getrlimit(var) + cur <= want and Process.setrlimit(var, cur = max > want ? max : want) + if cur == want + @logger.warn "#{resource} rlim_cur=#{cur} is barely enough" + @logger.warn "#{svc} may monopolize resources dictated by #{resource}" \ + " and leave none for your app" + end + rescue => e + @logger.error e.message + @logger.error "#{resource} needs to be increased to >=#{want} before" \ + " starting #{svc}" + end + + def svc + File.basename($0) + end + def use(*args) model = args.shift or return @use mod = begin -- cgit v1.2.3-24-ge0c7