Method: Instana::Collectors::GC#collect

Defined in:
lib/instana/collectors/gc.rb

#collectObject

collect

To collect garbage collector related metrics.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/instana/collectors/gc.rb', line 19

def collect
  @this_gc.clear
  stats = ::GC.stat

  # Time spent in GC.  Report in milliseconds
  @this_gc[:totalTime] = ::GC::Profiler.total_time * 1000
  ::GC::Profiler.clear

  # GC metrics only available on newer Ruby versions
  if RUBY_VERSION >= '2.1'
    # GC runs.  Calculate how many have occurred since the last call
    @this_gc[:minorGcs] = stats[:minor_gc_count] - @last_minor_count
    @this_gc[:majorGcs] = stats[:major_gc_count] - @last_major_count

    # Store these counts so that we have something to compare to next
    # time around.
    @last_major_count = stats[:major_gc_count]
    @last_minor_count = stats[:minor_gc_count]

    @this_gc[:heap_live] = stats[:heap_live_slots] || stats[:heap_live_num]
    @this_gc[:heap_free] = stats[:heap_free_slots] || stats[:heap_free_num]
  else
    @this_gc[:heap_live] = stats[:heap_live_slot] || stats[:heap_live_num]
    @this_gc[:heap_free] = stats[:heap_free_slot] || stats[:heap_free_num]
  end

  @this_gc
rescue => e
  ::Instana.logger.info "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}"
  ::Instana.logger.debug e.backtrace.join("\r\n")
end