FEATURE: set UNICORN_STATS_SOCKET_DIR for status socket
eg: sam@ubuntu stats_sockets % socat - UNIX-CONNECT:9622.sock gc_stat {"count":46,"heap_allocated_pages":2459,"heap_sorted_length":2460,"heap_allocatable_pages":0,"heap_available_slots":1002267,"heap_live_slots":647293,"heap_free_slots":354974,"heap_final_slots":0,"heap_marked_slots":503494,"heap_swept_slots":498773,"heap_eden_pages":2459,"heap_tomb_pages":0,"total_allocated_pages":2459,"total_freed_pages":0,"total_allocated_objects":4337014,"total_freed_objects":3689721,"malloc_increase_bytes":6448248,"malloc_increase_bytes_limit":29188387,"minor_gc_count":36,"major_gc_count":10,"remembered_wb_unprotected_objects":19958,"remembered_wb_unprotected_objects_limit":39842,"old_objects":462019,"old_objects_limit":895782,"oldmalloc_increase_bytes":6448696,"oldmalloc_increase_bytes_limit":19350882}
This commit is contained in:
parent
b0151ab66a
commit
0b3aec9c94
|
@ -140,7 +140,7 @@ GEM
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
jwt (1.5.6)
|
jwt (1.5.6)
|
||||||
kgio (2.10.0)
|
kgio (2.11.0)
|
||||||
libv8 (5.3.332.38.5)
|
libv8 (5.3.332.38.5)
|
||||||
listen (3.1.5)
|
listen (3.1.5)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
|
@ -272,7 +272,7 @@ GEM
|
||||||
activesupport (= 4.2.8)
|
activesupport (= 4.2.8)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
raindrops (0.17.0)
|
raindrops (0.18.0)
|
||||||
rake (11.3.0)
|
rake (11.3.0)
|
||||||
rake-compiler (0.9.9)
|
rake-compiler (0.9.9)
|
||||||
rake
|
rake
|
||||||
|
@ -380,7 +380,7 @@ GEM
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.7.1)
|
unf_ext (0.0.7.1)
|
||||||
unicorn (5.2.0)
|
unicorn (5.3.0)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
uniform_notifier (1.10.0)
|
uniform_notifier (1.10.0)
|
||||||
|
|
|
@ -36,6 +36,24 @@ preload_app true
|
||||||
# fast LAN.
|
# fast LAN.
|
||||||
check_client_connection false
|
check_client_connection false
|
||||||
|
|
||||||
|
@stats_socket_dir = ENV["UNICORN_STATS_SOCKET_DIR"]
|
||||||
|
|
||||||
|
def clean_up_stats_socket(server, pid)
|
||||||
|
if @stats_socket_dir.present?
|
||||||
|
name = "#{@stats_socket_dir}/#{pid}.sock"
|
||||||
|
FileUtils.rm_f(name)
|
||||||
|
server.logger.info "Cleaned up stats socket at #{name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def start_stats_socket(server)
|
||||||
|
if @stats_socket_dir.present?
|
||||||
|
name = "#{@stats_socket_dir}/#{Process.pid}.sock"
|
||||||
|
StatsSocket.new(name).start
|
||||||
|
server.logger.info "Started stats socket at #{name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
initialized = false
|
initialized = false
|
||||||
before_fork do |server, worker|
|
before_fork do |server, worker|
|
||||||
|
|
||||||
|
@ -51,6 +69,18 @@ before_fork do |server, worker|
|
||||||
# router warm up
|
# router warm up
|
||||||
Rails.application.routes.recognize_path('abc') rescue nil
|
Rails.application.routes.recognize_path('abc') rescue nil
|
||||||
|
|
||||||
|
if @stats_socket_dir.present?
|
||||||
|
server.logger.info "Initializing stats socket at #{@stats_socket_dir}"
|
||||||
|
begin
|
||||||
|
FileUtils.mkdir_p @stats_socket_dir
|
||||||
|
FileUtils.rm_f Dir.glob("#{@stats_socket_dir}/*.sock")
|
||||||
|
require 'stats_socket'
|
||||||
|
start_stats_socket(server)
|
||||||
|
rescue => e
|
||||||
|
server.logger.info "Failed to initialize stats socket dir #{e}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# get rid of rubbish so we don't share it
|
# get rid of rubbish so we don't share it
|
||||||
GC.start
|
GC.start
|
||||||
|
|
||||||
|
@ -75,6 +105,11 @@ before_fork do |server, worker|
|
||||||
|
|
||||||
require 'demon/sidekiq'
|
require 'demon/sidekiq'
|
||||||
|
|
||||||
|
if @stats_socket_dir
|
||||||
|
Demon::Sidekiq.after_fork do
|
||||||
|
start_stats_socket(server)
|
||||||
|
end
|
||||||
|
end
|
||||||
Demon::Sidekiq.start(sidekiqs)
|
Demon::Sidekiq.start(sidekiqs)
|
||||||
|
|
||||||
Signal.trap("SIGTSTP") do
|
Signal.trap("SIGTSTP") do
|
||||||
|
@ -168,12 +203,17 @@ before_fork do |server, worker|
|
||||||
sleep 1
|
sleep 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after_worker_exit do |server, worker, status|
|
||||||
|
clean_up_stats_socket(server, status.pid)
|
||||||
|
end
|
||||||
|
|
||||||
after_fork do |server, worker|
|
after_fork do |server, worker|
|
||||||
|
start_stats_socket(server)
|
||||||
|
|
||||||
# warm up v8 after fork, that way we do not fork a v8 context
|
# warm up v8 after fork, that way we do not fork a v8 context
|
||||||
# it may cause issues if bg threads in a v8 isolate randomly stop
|
# it may cause issues if bg threads in a v8 isolate randomly stop
|
||||||
# working due to fork
|
# working due to fork
|
||||||
Discourse.after_fork
|
Discourse.after_fork
|
||||||
|
|
||||||
begin
|
begin
|
||||||
PrettyText.cook("warm up **pretty text**")
|
PrettyText.cook("warm up **pretty text**")
|
||||||
rescue => e
|
rescue => e
|
||||||
|
|
|
@ -6,6 +6,10 @@ class Demon::Sidekiq < Demon::Base
|
||||||
"sidekiq"
|
"sidekiq"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.after_fork(&blk)
|
||||||
|
blk ? (@blk=blk) : @blk
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def suppress_stdout
|
def suppress_stdout
|
||||||
|
@ -17,6 +21,8 @@ class Demon::Sidekiq < Demon::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_fork
|
def after_fork
|
||||||
|
Demon::Sidekiq.after_fork&.call
|
||||||
|
|
||||||
STDERR.puts "Loading Sidekiq in process id #{Process.pid}"
|
STDERR.puts "Loading Sidekiq in process id #{Process.pid}"
|
||||||
require 'sidekiq/cli'
|
require 'sidekiq/cli'
|
||||||
# CLI will close the logger, if we have one set we can be in big
|
# CLI will close the logger, if we have one set we can be in big
|
||||||
|
|
Loading…
Reference in New Issue