Class: OneApm::Collector::Samplers::VMSampler
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
#id
Instance Method Summary
collapse
enabled?, inherited, name, named, sampler_classes, supported_on_this_platform?
Constructor Details
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
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
|