36 lines
1.3 KiB
Ruby
36 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
return unless Gitlab::Runtime.application?
|
|
return unless Gitlab::Utils.to_boolean(ENV['GITLAB_MEMORY_WATCHDOG_ENABLED'])
|
|
|
|
Gitlab::Cluster::LifecycleEvents.on_worker_start do
|
|
watchdog = Gitlab::Memory::Watchdog.new
|
|
max_strikes = ENV.fetch('GITLAB_MEMWD_MAX_STRIKES', 5).to_i
|
|
sleep_time_seconds = ENV.fetch('GITLAB_MEMWD_SLEEP_TIME_SEC', 60).to_i
|
|
max_mem_growth = ENV.fetch('GITLAB_MEMWD_MAX_MEM_GROWTH', 3.0).to_f
|
|
max_heap_frag = ENV.fetch('GITLAB_MEMWD_MAX_HEAP_FRAG', 0.5).to_f
|
|
|
|
watchdog.configure do |config|
|
|
config.handler =
|
|
if Gitlab::Runtime.puma?
|
|
Gitlab::Memory::Watchdog::PumaHandler.new
|
|
elsif Gitlab::Runtime.sidekiq?
|
|
Gitlab::Memory::Watchdog::TermProcessHandler.new
|
|
else
|
|
Gitlab::Memory::Watchdog::NullHandler.instance
|
|
end
|
|
|
|
config.logger = Gitlab::AppLogger
|
|
config.sleep_time_seconds = sleep_time_seconds
|
|
# config.monitor.use MonitorClass, args*, max_strikes:, kwargs**, &block
|
|
config.monitors.use Gitlab::Memory::Watchdog::Monitor::HeapFragmentation,
|
|
max_heap_fragmentation: max_heap_frag,
|
|
max_strikes: max_strikes
|
|
|
|
config.monitors.use Gitlab::Memory::Watchdog::Monitor::UniqueMemoryGrowth,
|
|
max_mem_growth: max_mem_growth,
|
|
max_strikes: max_strikes
|
|
end
|
|
|
|
Gitlab::BackgroundTask.new(watchdog).start
|
|
end
|