From 820923664ddf353533892f0af21ed3822508a655 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sat, 28 Jul 2018 18:12:34 -0700 Subject: [PATCH] Make rbtrace work under unicorn The Unicorn master resets any signal handlers and prevents rbtrace from working properly as a result. Move the `require 'rbtrace'` call to the Unicorn `after_fork` block and keep the initializer only for Sidekiq. --- config/initializers/rbtrace.rb | 4 +++- config/unicorn.rb.example | 4 ++++ doc/administration/troubleshooting/debug.md | 7 ++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/config/initializers/rbtrace.rb b/config/initializers/rbtrace.rb index 3a076c99ad0..c96e6985cda 100644 --- a/config/initializers/rbtrace.rb +++ b/config/initializers/rbtrace.rb @@ -1,3 +1,5 @@ # frozen_string_literal: true -require 'rbtrace' if ENV['ENABLE_RBTRACE'] +# rbtrace needs to be included after the unicorn worker forks. +# See the after_fork block in config/unicorn.rb.example. +require 'rbtrace' if ENV['ENABLE_RBTRACE'] && Sidekiq.server? diff --git a/config/unicorn.rb.example b/config/unicorn.rb.example index 220a0191160..8f2d842e5b6 100644 --- a/config/unicorn.rb.example +++ b/config/unicorn.rb.example @@ -124,6 +124,10 @@ before_fork do |server, worker| end after_fork do |server, worker| + # Unicorn clears out signals before it forks, so rbtrace won't work + # unless it is enabled after the fork. + require 'rbtrace' if ENV['ENABLE_RBTRACE'] + # per-process listener ports for debugging/admin/migrations # addr = "127.0.0.1:#{9293 + worker.nr}" # server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true) diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md index 7ae4f7c1515..2902af8c782 100644 --- a/doc/administration/troubleshooting/debug.md +++ b/doc/administration/troubleshooting/debug.md @@ -77,7 +77,12 @@ and more. However, this is not enabled by default. To enable it, define the gitlab_rails['env'] = {"ENABLE_RBTRACE" => "1"} ``` -Then reconfigure the system and restart Unicorn and Sidekiq. +Then reconfigure the system and restart Unicorn and Sidekiq. To run this +in Omnibus, run as root: + +```ruby +/opt/gitlab/embedded/bin/ruby /opt/gitlab/embedded/bin/rbtrace +``` ## Common Problems -- GitLab