Class: Sidekiq::WorkerKiller
- Inherits:
-
Object
- Object
- Sidekiq::WorkerKiller
- Includes:
- SidekiqComponent
- Defined in:
- lib/sidekiq/worker_killer.rb,
lib/sidekiq/worker_killer/version.rb
Overview
Sidekiq server middleware. Kill worker when the RSS memory exceeds limit after a given grace time.
Constant Summary collapse
- VERSION =
"1.1.0".freeze
- MUTEX =
Mutex.new
Instance Method Summary collapse
- #call(worker, job, queue) { ... } ⇒ Object
- #identity ⇒ Object
-
#initialize(options = {}) ⇒ WorkerKiller
constructor
A new instance of WorkerKiller.
Constructor Details
#initialize(options = {}) ⇒ WorkerKiller
Returns a new instance of WorkerKiller.
42 43 44 45 46 47 48 49 50 |
# File 'lib/sidekiq/worker_killer.rb', line 42 def initialize( = {}) @max_rss = .fetch(:max_rss, 0) @grace_time = .fetch(:grace_time, 15 * 60) @shutdown_wait = .fetch(:shutdown_wait, 30) @kill_signal = .fetch(:kill_signal, "SIGKILL") @gc = .fetch(:gc, true) @skip_shutdown = .fetch(:skip_shutdown_if, proc { false }) @on_shutdown = .fetch(:on_shutdown, nil) end |
Instance Method Details
#call(worker, job, queue) { ... } ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/sidekiq/worker_killer.rb', line 60 def call(worker, job, queue) yield # Skip if the max RSS is not exceeded return unless @max_rss > 0 return unless current_rss > @max_rss GC.start(full_mark: true, immediate_sweep: true) if @gc return unless current_rss > @max_rss if skip_shutdown?(worker, job, queue) warn "current RSS #{current_rss} exceeds maximum RSS #{@max_rss}, " \ "however shutdown will be ignored" return end warn "current RSS #{current_rss} of #{identity} exceeds " \ "maximum RSS #{@max_rss}" run_shutdown_hook(worker, job, queue) request_shutdown end |
#identity ⇒ Object
144 145 146 |
# File 'lib/sidekiq/worker_killer.rb', line 144 def identity config[:identity] || config["identity"] end |