Sha256: 3e7edfe9361a3b41d679146296e098c4722f3cf39c23cb765091ef2d092a5bd9

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

# encoding: UTF-8
class Fluent::GcInput < Fluent::Input
  Fluent::Plugin.register_input('gc', self)

  config_param :disable, :bool, :default => false
  config_param :interval, :time, :default => 5
  config_param :debug, :bool, :default => false
  attr_accessor :last_checked

  def configure(conf)
    super

    @interval = @interval.to_i
  end

  def start
    super
    GC.disable if @disable
    @watcher = Thread.new(&method(:watcher))
  end

  def shutdown
    super
    @watcher.terminate
    @watcher.join
  end

  # thread callback
  def watcher
    @last_checked = Fluent::Engine.now
    while true
      sleep 0.5
      begin
        if Fluent::Engine.now - @last_checked >= @interval
          now = Fluent::Engine.now
          start_gc
          @last_checked = now
        end
      rescue => e
        $log.warn "#{e.class} #{e.message} #{e.backtrace.first}"
      end
    end
  end

  def start_gc
    $log.info "gc: before #{GC.stat}" if @debug # intentionally info level
    disabled = GC.enable
    GC.start
    GC.disable if disabled
    $log.info "gc: after  #{GC.stat}" if @debug
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-gc-0.0.1 lib/fluent/plugin/in_gc.rb