class ElasticAPM::Metrics::JVMSet

@api private

Constants

MAX_TRIES

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/elastic_apm/metrics/jvm_set.rb, line 30
def initialize(*args)
  super

  @error_count = 0
end

Public Instance Methods

collect() click to toggle source
Calls superclass method
# File lib/elastic_apm/metrics/jvm_set.rb, line 36
def collect
  read!
  super
end
read!() click to toggle source
# File lib/elastic_apm/metrics/jvm_set.rb, line 41
def read!
  return if disabled?

  heap = platform_bean.get_heap_memory_usage
  non_heap = platform_bean.get_non_heap_memory_usage

  gauge(:"jvm.memory.heap.used").value = heap.get_used
  gauge(:"jvm.memory.heap.committed").value = heap.get_committed
  gauge(:"jvm.memory.heap.max").value = heap.get_max

  gauge(:"jvm.memory.non_heap.used").value = non_heap.get_used
  gauge(:"jvm.memory.non_heap.committed").value = non_heap.get_committed
  gauge(:"jvm.memory.non_heap.max").value = non_heap.get_max

  pool_beans.each do |bean|
    next unless bean.type.name == "HEAP"

    tags = { name: bean.get_name }

    gauge(:"jvm.memory.heap.pool.used", tags: tags).value = bean.get_usage.get_used
    gauge(:"jvm.memory.heap.pool.committed", tags: tags).value = bean.get_usage.get_committed
    gauge(:"jvm.memory.heap.pool.max", tags: tags).value = bean.get_usage.get_max
  end
rescue Exception => e
  error("JVM metrics encountered error: %s", e)
  debug("Backtrace:") { e.backtrace.join("\n") }

  @error_count += 1
  if @error_count >= MAX_TRIES
    disable!
    error("Disabling JVM metrics after #{MAX_TRIES} errors", e)
  end
end

Private Instance Methods

platform_bean() click to toggle source
# File lib/elastic_apm/metrics/jvm_set.rb, line 77
def platform_bean
  @platform_bean ||= java.lang.management.ManagementFactory.getPlatformMXBean(
    java.lang.management.MemoryMXBean.java_class
  )
end
pool_beans() click to toggle source
# File lib/elastic_apm/metrics/jvm_set.rb, line 83
def pool_beans
  @pool_beans ||= java.lang.management.ManagementFactory.getMemoryPoolMXBeans()
end