JVM

Java Virtual Machine (JVM) Attributes

This document defines Java Virtual machine related attributes.

Attributes:

KeyStabilityValue TypeDescriptionExample Values
jvm.buffer.pool.nameDevelopmentstringName of the buffer pool. [1]mapped; direct
jvm.executor.nameDevelopmentstringName of the executor. [2]pool-1-thread-*; ForkJoinPool.commonPool-worker-*; orders-vt-*
jvm.executor.owner.nameDevelopmentstringName of the logical component that owns the executor. [3]tomcat; jetty; netty
jvm.executor.thread.stateDevelopmentstringState of an executor thread.active; idle (see more)
jvm.executor.typeDevelopmentstringThe fully qualified class name of the executor implementation.java.util.concurrent.ThreadPoolExecutor; java.util.concurrent.ForkJoinPool
jvm.gc.actionStablestringName of the garbage collector action. [4]end of minor GC; end of major GC
jvm.gc.causeDevelopmentstringName of the garbage collector cause. [5]System.gc(); Allocation Failure
jvm.gc.nameStablestringName of the garbage collector. [6]G1 Young Generation; G1 Old Generation
jvm.memory.pool.nameStablestringName of the memory pool. [7]G1 Old Gen; G1 Eden space; G1 Survivor Space
jvm.memory.typeStablestringThe type of memory.heap; non_heap (see more)
jvm.thread.daemonStablebooleanWhether the thread is daemon or not.
jvm.thread.stateStablestringState of the thread.runnable; blocked (see more)

[1] jvm.buffer.pool.name: Pool names are generally obtained via BufferPoolMXBean#getName().

[2] jvm.executor.name: The executor name SHOULD be low-cardinality. If jvm.executor.owner.name is present, the combination of jvm.executor.owner.name and jvm.executor.name SHOULD be unique within the instrumented application; otherwise, jvm.executor.name SHOULD be unique when an executor-specific name is available. If the executor implementation does not provide an explicit name, instrumentation SHOULD derive a name from available implementation-specific metadata, such as a normalized worker thread name. If no executor-specific name or metadata is available, instrumentation MAY use unknown. The unknown value does not identify an executor, and metrics from multiple executors using this value MAY be aggregated. Users requiring per-executor metric series SHOULD configure a distinct name through the executor’s ThreadFactory. Instrumentations SHOULD document how the name is derived and how users can configure it. Once metric series registration for an executor has started, jvm.executor.name and jvm.executor.owner.name MUST remain stable for the lifetime of that registration. Instrumentations SHOULD determine these attributes before the first worker is registered. Instrumentations MUST NOT re-register cumulative metrics under a new attribute set or replay prior cumulative values under new attributes.

[3] jvm.executor.owner.name: The executor owner name SHOULD be a low-cardinality identifier for the component that creates and configures the executor. It is neither the executor implementation type nor an OpenTelemetry instrumentation scope.

[4] jvm.gc.action: Garbage collector action is generally obtained via GarbageCollectionNotificationInfo#getGcAction().

[5] jvm.gc.cause: Garbage collector cause is generally obtained via GarbageCollectionNotificationInfo#getGcCause().

[6] jvm.gc.name: Garbage collector name is generally obtained via GarbageCollectionNotificationInfo#getGcName().

[7] jvm.memory.pool.name: Pool names are generally obtained via MemoryPoolMXBean#getName().


jvm.executor.thread.state has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

ValueDescriptionStability
activeThe thread is currently executing a task.Development
idleThe thread currently exists but is not executing a task.Development

jvm.memory.type has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

ValueDescriptionStability
heapHeap memory.Stable
non_heapNon-heap memoryStable

jvm.thread.state has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

ValueDescriptionStability
blockedA thread that is blocked waiting for a monitor lock is in this state.Stable
newA thread that has not yet started is in this state.Stable
runnableA thread executing in the Java virtual machine is in this state.Stable
terminatedA thread that has exited is in this state.Stable
timed_waitingA thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.Stable
waitingA thread that is waiting indefinitely for another thread to perform a particular action is in this state.Stable