Sha256: 753ff13e0ecd2f0be1d2404b4379da8cd84c74fffc4d206b315f0389a89afa38

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'get_process_mem'

module PumaWorkerKiller
  extend self

  attr_accessor :ram, :frequency, :percent_usage, :rolling_restart_frequency, :reaper_status_logs, :pre_term
  self.ram           = 512  # mb
  self.frequency     = 10   # seconds
  self.percent_usage = 0.99 # percent of RAM to use
  self.rolling_restart_frequency = 6 * 3600 # 6 hours in seconds
  self.reaper_status_logs = true
  self.pre_term = lambda { |_| } # nop

  def config
    yield self
  end

  def reaper(ram = self.ram, percent = self.percent_usage, reaper_status_logs = self.reaper_status_logs, pre_term = self.pre_term)
    Reaper.new(ram * percent_usage, nil, reaper_status_logs, pre_term)
  end

  def start(frequency = self.frequency, reaper = self.reaper)
    AutoReap.new(frequency, reaper).start
    enable_rolling_restart(rolling_restart_frequency) if rolling_restart_frequency
  end

  def enable_rolling_restart(frequency = self.rolling_restart_frequency)
    frequency = frequency + rand(0..10.0) # so all workers don't restart at the exact same time across multiple machines
    AutoReap.new(frequency, RollingRestart.new).start
  end
end

require 'puma_worker_killer/puma_memory'
require 'puma_worker_killer/reaper'
require 'puma_worker_killer/rolling_restart'
require 'puma_worker_killer/auto_reap'
require 'puma_worker_killer/version'

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
puma_worker_killer-0.1.0 lib/puma_worker_killer.rb