Memory leaks are hard to hunt down … but killing things is super easy 🙂
(you have a monitor that restarts them … right !?)
# memory leaks or config changes happen ... # shutdown -> slowly kill all threads -> restarted by service # log of all restarts is kept in tmp/shutdown def trigger_worker_restart_after_interval Thread.new do interval = 30*60 time = interval + rand(interval) puts "Planning restart in #{time}s -> #{(Time.now + time).to_s(:db)}" sleep time puts "Planned restart" FileUtils.mkdir_p("tmp") File.write("tmp/parent_pid", Process.pid) # end this thread to ensure a clean exit and kill yourself `bundle exec sidekiqctl stop tmp/parent_pid 60 2>&1 >> tmp/shutdown &` end end