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