Hi, I''m seeing the following output of ps after starting unicorn, which as I understand it means that there are multiple master processes running, each with its own pid. Is that normal behaviour or is there something wrong with my setup? $ ps xf|grep 4002 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D 26734 ? S 0:22 \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D 26736 ? S 0:00 | \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D 26739 ? S 0:00 | \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D 26737 ? S 0:22 \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D 26740 ? S 0:00 | \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D 26741 ? S 0:00 | \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D 26742 ? S 0:21 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D 26744 ? S 0:00 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D 26745 ? S 0:00 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D $ cat tmp/pids/unicorn.pid 8022 This is on Linux 2.4.27, ruby 1.9.2, unicorn 3.3.1, rails 3.0.3 in an rvm gemset. # config/unicorn.rb worker_processes 3 pid "tmp/pids/unicorn.pid" stderr_path "log/unicorn.stderr.log" stdout_path "log/unicorn.stdout.log" I start unicorn like this: unicorn -c config/unicorn.rb -E production -p 4002 -D Using "bundle exec unicorn" or unicorn_rails instead doesn''t seem to make a difference. Starting the same project on my desktop with I believe is mostly the same setup except that it is Linux 2.6.34, the process list looks like this, which looks normal to me: $ ps xf|grep 4002 2692 ? Sl 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D 2695 ? Rl 0:05 \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D 2698 ? Rl 0:05 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D 2700 ? Rl 0:05 \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D Til
Tilmann Singer <tils at tils.net> wrote:> Hi, > > I''m seeing the following output of ps after starting unicorn, which as > I understand it means that there are multiple master processes > running, each with its own pid. Is that normal behaviour or is there > something wrong with my setup?It''s normal behavior for Linux 2.4.x + Ruby 1.9, don''t worry about it.> $ ps xf|grep 4002 > 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D > 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > 26734 ? S 0:22 \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D > 26736 ? S 0:00 | \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D > 26739 ? S 0:00 | \_ unicorn worker[0] -c config/unicorn.rb -E production -p 4002 -D > 26737 ? S 0:22 \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D > 26740 ? S 0:00 | \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D > 26741 ? S 0:00 | \_ unicorn worker[2] -c config/unicorn.rb -E production -p 4002 -D > 26742 ? S 0:21 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D > 26744 ? S 0:00 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D > 26745 ? S 0:00 \_ unicorn worker[1] -c config/unicorn.rb -E production -p 4002 -D > $ cat tmp/pids/unicorn.pid > 8022 > > This is on Linux 2.4.27, ruby 1.9.2With LinuxThreads in 2.4, the native threads used by Ruby 1.9 each had a unique PID and /proc entry whereas with NPTL in 2.6 hides the top-level entries of tasks that weren''t processes (still visible in /proc/$pid/task/*) "tasks" are just the in-kernel representation of either processes and native threads in all Linux versions. They''re created via the same system call, clone(2), so pthread_create() and fork() are just wrappers around clone() with different arguments. It''s just 2.4 had fewer options for clone() that made it weirder and less POSIX-conformant. The pthreads(7) manpage has more details on the differences between NPTL and LinuxThreads. Wow, I didn''t realize people ran the latest Rubies on 2.4.x! -- Eric Wong
On Jan 31, 2011, at 1:47 AM, Tilmann Singer wrote:> Hi, > > I''m seeing the following output of ps after starting unicorn, which as > I understand it means that there are multiple master processes > running, each with its own pid. Is that normal behaviour or is there > something wrong with my setup? ><snip>> # config/unicorn.rb > worker_processes 3 > pid "tmp/pids/unicorn.pid" > stderr_path "log/unicorn.stderr.log" > stdout_path "log/unicorn.stdout.log"Unicorn doesn''t kill the old master on it''s own, you need an after_fork() like so (from the default/suggested unicorn conf) http://unicorn.bogomips.org/examples/unicorn.conf.rb
At Mon, 31 Jan 2011 18:08:15 +0000, Eric Wong <normalperson at yhbt.net> wrote:> > Tilmann Singer <tils at tils.net> wrote: > > I''m seeing the following output of ps after starting unicorn, which as > > I understand it means that there are multiple master processes > > running, each with its own pid. Is that normal behaviour or is there > > something wrong with my setup? > > It''s normal behavior for Linux 2.4.x + Ruby 1.9, don''t worry about it.OK thanks, good to know.> > $ ps xf|grep 4002 > > 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D > > 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > > 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D[...]> > $ cat tmp/pids/unicorn.pid > > 8022Could it be that the content of the pidfile is wrong in this case? I found that I always have to signal the pid of the last of the master process list entries (26743 in this example) to see them have an effect. Not a big deal, just wondering.> Wow, I didn''t realize people ran the latest Rubies on 2.4.x!Time to upgrade for me I assume ... greetings, Til
Tilmann Singer <tils at tils.net> wrote:> > > $ ps xf|grep 4002 > > > 8022 ? S 0:00 unicorn master -c config/unicorn.rb -E production -p 4002 -D > > > 8024 ? S 0:00 \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > > > 26743 ? S 0:00 | \_ unicorn master -c config/unicorn.rb -E production -p 4002 -D > [...] > > > $ cat tmp/pids/unicorn.pid > > > 8022 > > Could it be that the content of the pidfile is wrong in this case? I > found that I always have to signal the pid of the last of the master > process list entries (26743 in this example) to see them have an > effect. Not a big deal, just wondering.Probably, I don''t think there''s a reliable way to get the pid dedicated to signal handling with LinuxThreads...> > Wow, I didn''t realize people ran the latest Rubies on 2.4.x! > > Time to upgrade for me I assume ...Definitely, especially since you''re using Ruby 1.9.2 :) -- Eric Wong