From 4beeb52b1c52ea4486dea13cebe2a8438a9f2139 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 Jun 2011 01:10:07 +0000 Subject: memory reductions in worker process There's absolutely no need to keep the OptionParser around in worker processes. --- bin/unicorn | 1 + bin/unicorn_rails | 1 + lib/unicorn.rb | 4 ++-- lib/unicorn/http_server.rb | 4 +++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bin/unicorn b/bin/unicorn index f476a33..9962b58 100755 --- a/bin/unicorn +++ b/bin/unicorn @@ -106,6 +106,7 @@ op = OptionParser.new("", 24, ' ') do |opts| end app = Unicorn.builder(ARGV[0] || 'config.ru', op) +op = nil if $DEBUG require 'pp' diff --git a/bin/unicorn_rails b/bin/unicorn_rails index 860a9ce..4bd599f 100755 --- a/bin/unicorn_rails +++ b/bin/unicorn_rails @@ -186,6 +186,7 @@ def rails_builder(ru, op, daemonize) end app = rails_builder(ARGV[0], op, rackup_opts[:daemonize]) +op = nil if $DEBUG require 'pp' diff --git a/lib/unicorn.rb b/lib/unicorn.rb index f9aa73a..9349e49 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -31,9 +31,9 @@ module Unicorn # app (which we defer based on the outcome of "preload_app" in the # Unicorn config). The returned lambda will be called when it is # time to build the app. - def self.builder(ru, opts) + def self.builder(ru, op) # allow Configurator to parse cli switches embedded in the ru file - Unicorn::Configurator::RACKUP.update(:file => ru, :optparse => opts) + op = Unicorn::Configurator::RACKUP.merge!(:file => ru, :optparse => op) # always called after config file parsing, may be called after forking lambda do || diff --git a/lib/unicorn/http_server.rb b/lib/unicorn/http_server.rb index 3933da1..059f040 100644 --- a/lib/unicorn/http_server.rb +++ b/lib/unicorn/http_server.rb @@ -458,7 +458,9 @@ class Unicorn::HttpServer def after_fork_internal @ready_pipe.close if @ready_pipe - @ready_pipe = nil + Unicorn::Configurator::RACKUP.clear + @ready_pipe = @init_listeners = @config = @before_exec = @before_fork = nil + srand # http://redmine.ruby-lang.org/issues/4338 # The OpenSSL PRNG is seeded with only the pid, and apps with frequently -- cgit v1.2.3-24-ge0c7