Class: OneApm::Collector::Samplers::VMSampler
- Inherits:
-
OneApm::Collector::Sampler
- Object
- OneApm::Collector::Sampler
- OneApm::Collector::Samplers::VMSampler
- Defined in:
- lib/one_apm/collector/samplers/vm_sampler.rb
Constant Summary collapse
- OA_GC_RUNS_METRIC =
'RubyVM/GC/runs'.freeze
- OA_HEAP_LIVE_METRIC =
'RubyVM/GC/heap_live'.freeze
- OA_HEAP_FREE_METRIC =
'RubyVM/GC/heap_free'.freeze
- OA_THREAD_COUNT_METRIC =
'RubyVM/Threads/all'.freeze
- OA_OBJECT_ALLOCATIONS_METRIC =
'RubyVM/GC/total_allocated_object'.freeze
- OA_MAJOR_GC_METRIC =
'RubyVM/GC/major_gc_count'.freeze
- OA_MINOR_GC_METRIC =
'RubyVM/GC/minor_gc_count'.freeze
- OA_METHOD_INVALIDATIONS_METRIC =
'RubyVM/CacheInvalidations/method'.freeze
- OA_CONSTANT_INVALIDATIONS_METRIC =
'RubyVM/CacheInvalidations/constant'.freeze
Instance Attribute Summary collapse
-
#transaction_count ⇒ Object
readonly
Returns the value of attribute transaction_count.
Attributes inherited from OneApm::Collector::Sampler
Instance Method Summary collapse
-
#initialize ⇒ VMSampler
constructor
A new instance of VMSampler.
- #on_transaction_finished(*_) ⇒ Object
- #poll ⇒ Object
- #record_delta(snapshot, key, metric, txn_count) ⇒ Object
- #record_gauge_metric(metric_name, value) ⇒ Object
- #record_gc_runs_metric(snapshot, txn_count) ⇒ Object
- #record_heap_free_metric(snapshot) ⇒ Object
- #record_heap_live_metric(snapshot) ⇒ Object
- #record_thread_count_metric(snapshot) ⇒ Object
- #reset_transaction_count ⇒ Object
- #setup_events(event_listener) ⇒ Object
- #take_snapshot ⇒ Object
Methods inherited from OneApm::Collector::Sampler
enabled?, inherited, name, named, sampler_classes, supported_on_this_platform?
Constructor Details
#initialize ⇒ VMSampler
Returns a new instance of VMSampler.
24 25 26 27 28 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 24 def initialize @lock = Mutex.new @transaction_count = 0 @last_snapshot = take_snapshot end |
Instance Attribute Details
#transaction_count ⇒ Object (readonly)
Returns the value of attribute transaction_count.
20 21 22 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 20 def transaction_count @transaction_count end |
Instance Method Details
#on_transaction_finished(*_) ⇒ Object
38 39 40 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 38 def on_transaction_finished(*_) @lock.synchronize { @transaction_count += 1 } end |
#poll ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 105 def poll snap = take_snapshot tcount = reset_transaction_count record_gc_runs_metric(snap, tcount) record_delta(snap, :total_allocated_object, OA_OBJECT_ALLOCATIONS_METRIC, tcount) record_delta(snap, :major_gc_count, OA_MAJOR_GC_METRIC, tcount) record_delta(snap, :minor_gc_count, OA_MINOR_GC_METRIC, tcount) record_delta(snap, :method_cache_invalidations, OA_METHOD_INVALIDATIONS_METRIC, tcount) record_delta(snap, :constant_cache_invalidations, OA_CONSTANT_INVALIDATIONS_METRIC, tcount) record_heap_live_metric(snap) record_heap_free_metric(snap) record_thread_count_metric(snap) @last_snapshot = snap end |
#record_delta(snapshot, key, metric, txn_count) ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 69 def record_delta(snapshot, key, metric, txn_count) value = snapshot.send(key) if value delta = value - @last_snapshot.send(key) OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(metric) do |stats| stats.call_count += txn_count stats.total_call_time += delta end end end |
#record_gauge_metric(metric_name, value) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 80 def record_gauge_metric(metric_name, value) OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(metric_name) do |stats| stats.call_count = value stats.sum_of_squares = 1 end end |
#record_gc_runs_metric(snapshot, txn_count) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 50 def record_gc_runs_metric(snapshot, txn_count) if snapshot.gc_total_time || snapshot.gc_runs if snapshot.gc_total_time gc_time = snapshot.gc_total_time - @last_snapshot.gc_total_time.to_f end if snapshot.gc_runs gc_runs = snapshot.gc_runs - @last_snapshot.gc_runs end wall_clock_time = snapshot.taken_at - @last_snapshot.taken_at OneApm::Manager.agent.stats_engine.tl_record_unscoped_metrics(OA_GC_RUNS_METRIC) do |stats| stats.call_count += txn_count stats.total_call_time += gc_runs if gc_runs stats.total_exclusive_time += gc_time if gc_time stats.max_call_time = (gc_time.nil? ? 0 : 1) stats.sum_of_squares += wall_clock_time end end end |
#record_heap_free_metric(snapshot) ⇒ Object
93 94 95 96 97 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 93 def record_heap_free_metric(snapshot) if snapshot.heap_free record_gauge_metric(OA_HEAP_FREE_METRIC, snapshot.heap_free) end end |
#record_heap_live_metric(snapshot) ⇒ Object
87 88 89 90 91 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 87 def record_heap_live_metric(snapshot) if snapshot.heap_live record_gauge_metric(OA_HEAP_LIVE_METRIC, snapshot.heap_live) end end |
#record_thread_count_metric(snapshot) ⇒ Object
99 100 101 102 103 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 99 def record_thread_count_metric(snapshot) if snapshot.thread_count record_gauge_metric(OA_THREAD_COUNT_METRIC, snapshot.thread_count) end end |
#reset_transaction_count ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 42 def reset_transaction_count @lock.synchronize do old_count = @transaction_count @transaction_count = 0 old_count end end |
#setup_events(event_listener) ⇒ Object
34 35 36 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 34 def setup_events(event_listener) event_listener.subscribe(:transaction_finished, &method(:on_transaction_finished)) end |
#take_snapshot ⇒ Object
30 31 32 |
# File 'lib/one_apm/collector/samplers/vm_sampler.rb', line 30 def take_snapshot OneApm::Support::VM.snapshot end |