rosa-build/config/initializers/1_sidekiq.rb

63 lines
1.6 KiB
Ruby

require 'sidekiq/scheduler'
Kiqit.config.enabled = true
Sidekiq.configure_server do |config|
config.on(:startup) do
Sidekiq.schedule = YAML
.load_file(File.expand_path('../../../config/schedule.yml', __FILE__))
Sidekiq::Scheduler.reload_schedule!
end
end
if ENV["PROFILE"]
require "objspace"
ObjectSpace.trace_object_allocations_start
Sidekiq.logger.info "allocations tracing enabled"
module Sidekiq
module Middleware
module Server
class Profiler
# Number of jobs to process before reporting
JOBS = 100
class << self
mattr_accessor :counter
self.counter = 0
def synchronize(&block)
@lock ||= Mutex.new
@lock.synchronize(&block)
end
end
def call(worker_instance, item, queue)
begin
yield
ensure
self.class.synchronize do
self.class.counter += 1
if self.class.counter % JOBS == 0
Sidekiq.logger.info "reporting allocations after #{self.class.counter} jobs"
GC.start
out = File.open("/tmp/heap.json", "w")
ObjectSpace.dump_all(output: out)
out.close
Sidekiq.logger.info "heap saved to heap.json"
end
end
end
end
end
end
end
end
Sidekiq.configure_server do |config|
config.server_middleware do |chain|
chain.add Sidekiq::Middleware::Server::Profiler
end
end
end