class NewRelic::Agent::Samplers::VMSampler
Constants
- CONSTANT_INVALIDATIONS_METRIC
- GC_RUNS_METRIC
- HEAP_FREE_METRIC
- HEAP_LIVE_METRIC
- MAJOR_GC_METRIC
- METHOD_INVALIDATIONS_METRIC
- MINOR_GC_METRIC
- OBJECT_ALLOCATIONS_METRIC
- THREAD_COUNT_METRIC
Attributes
transaction_count[R]
Public Class Methods
new()
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 25 def initialize @lock = Mutex.new @transaction_count = 0 @last_snapshot = take_snapshot end
Public Instance Methods
on_transaction_finished(*_)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 39 def on_transaction_finished(*_) @lock.synchronize { @transaction_count += 1 } end
poll()
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 106 def poll snap = take_snapshot tcount = reset_transaction_count record_gc_runs_metric(snap, tcount) record_delta(snap, :total_allocated_object, OBJECT_ALLOCATIONS_METRIC, tcount) record_delta(snap, :major_gc_count, MAJOR_GC_METRIC, tcount) record_delta(snap, :minor_gc_count, MINOR_GC_METRIC, tcount) record_delta(snap, :method_cache_invalidations, METHOD_INVALIDATIONS_METRIC, tcount) record_delta(snap, :constant_cache_invalidations, 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)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 70 def record_delta(snapshot, key, metric, txn_count) #THREAD_LOCAL_ACCESS value = snapshot.send(key) if value delta = value - @last_snapshot.send(key) NewRelic::Agent.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)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 81 def record_gauge_metric(metric_name, value) #THREAD_LOCAL_ACCESS NewRelic::Agent.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)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 51 def record_gc_runs_metric(snapshot, txn_count) #THREAD_LOCAL_ACCESS 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 NewRelic::Agent.agent.stats_engine.tl_record_unscoped_metrics(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)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 94 def record_heap_free_metric(snapshot) if snapshot.heap_free record_gauge_metric(HEAP_FREE_METRIC, snapshot.heap_free) end end
record_heap_live_metric(snapshot)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 88 def record_heap_live_metric(snapshot) if snapshot.heap_live record_gauge_metric(HEAP_LIVE_METRIC, snapshot.heap_live) end end
record_thread_count_metric(snapshot)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 100 def record_thread_count_metric(snapshot) if snapshot.thread_count record_gauge_metric(THREAD_COUNT_METRIC, snapshot.thread_count) end end
reset_transaction_count()
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 43 def reset_transaction_count @lock.synchronize do old_count = @transaction_count @transaction_count = 0 old_count end end
setup_events(event_listener)
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 35 def setup_events(event_listener) event_listener.subscribe(:transaction_finished, &method(:on_transaction_finished)) end
take_snapshot()
click to toggle source
# File lib/new_relic/agent/samplers/vm_sampler.rb, line 31 def take_snapshot NewRelic::Agent::VM.snapshot end