Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,30 @@ default, and the telemetry each produces:
<!-- DO NOT MANUALLY EDIT. Regenerate table following changes to instrumentation using ./gradlew generateDocs -->
<!-- generateDocsStart -->

| JfrFeature | Default Enabled | Metrics |
|---------------------------|-----------------|-------------------------------------------------------------------------------------------------------------------|
| BUFFER_METRICS | `false` | `jvm.buffer.count`, `jvm.buffer.memory.limit`, `jvm.buffer.memory.used` |
| CLASS_LOAD_METRICS | `false` | `jvm.class.count`, `jvm.class.loaded`, `jvm.class.unloaded` |
| CONTEXT_SWITCH_METRICS | `true` | `jvm.cpu.context_switch` |
| CPU_COUNT_METRICS | `true` | `jvm.cpu.limit` |
| CPU_UTILIZATION_METRICS | `false` | `jvm.cpu.recent_utilization`, `jvm.system.cpu.utilization` |
| GC_DURATION_METRICS | `false` | `jvm.gc.duration` |
| LOCK_METRICS | `true` | `jvm.cpu.longlock` |
| MEMORY_ALLOCATION_METRICS | `true` | `jvm.memory.allocation` |
| MEMORY_POOL_METRICS | `false` | `jvm.memory.committed`, `jvm.memory.init`, `jvm.memory.limit`, `jvm.memory.used`, `jvm.memory.used_after_last_gc` |
| NETWORK_IO_METRICS | `true` | `jvm.network.io`, `jvm.network.time` |
| THREAD_METRICS | `false` | `jvm.thread.count` |
**Warning**: JFR events might not be available for all JVMs or with a GraalVM native image, therefore limiting the produced metrics. The original implementation was done for Hotspot. OpenJ9 currently (Nov. 2025) only has the VM-level JFR implementation. So events emitted at the Java level (ie. in jdk.jfr) will not be present. Meaning, jdk.SocketRead, jdk.SocketWrite won't work.

| JfrFeature | Jfr Event names | Default Enabled | Metric names |
|---------------------------|----------------------------------------------------------------------------------------------|-----------------|-------------------------------------------------------------------------------------------------------------------|
| BUFFER_METRICS | `jdk.DirectBufferStatistics`[6] | `false` | `jvm.buffer.count`, `jvm.buffer.memory.limit`, `jvm.buffer.memory.used` |
| CLASS_LOAD_METRICS | `jdk.ClassLoadingStatistics`[5] | `false` | `jvm.class.count`, `jvm.class.loaded`, `jvm.class.unloaded` |
| CONTEXT_SWITCH_METRICS | `jdk.ThreadContextSwitchRate`[6] | `true` | `jvm.cpu.context_switch` |
| CPU_COUNT_METRICS | `jdk.ContainerConfiguration` | `true` | `jvm.cpu.limit` |
| CPU_UTILIZATION_METRICS | `jdk.CPULoad`[6] | `false` | `jvm.cpu.recent_utilization`, `jvm.system.cpu.utilization` |
| GC_DURATION_METRICS | `jdk.G1GarbageCollection`[1], `jdk.OldGarbageCollection`[4], `jdk.YoungGarbageCollection`[4] | `false` | `jvm.gc.duration` |
| LOCK_METRICS | `jdk.JavaMonitorWait` | `true` | `jvm.cpu.longlock` |
| MEMORY_ALLOCATION_METRICS | `jdk.ObjectAllocationInNewTLAB`, `jdk.ObjectAllocationOutsideTLAB`[2] | `true` | `jvm.memory.allocation` |
| MEMORY_POOL_METRICS | `jdk.G1HeapSummary`[1], `jdk.MetaspaceSummary`[2], `jdk.PSHeapSummary`[3] | `false` | `jvm.memory.committed`, `jvm.memory.init`, `jvm.memory.limit`, `jvm.memory.used`, `jvm.memory.used_after_last_gc` |
| NETWORK_IO_METRICS | `jdk.SocketRead`, `jdk.SocketWrite` | `true` | `jvm.network.io`, `jvm.network.time` |
| THREAD_METRICS | `jdk.JavaThreadStatistics` | `false` | `jvm.thread.count` |

**[1]** - G1 doesn't exist if you use the [community edition](https://www.graalvm.org/community/) for GraalVM native image.

**[2]** - Not applicable for GraalVM native image.

**[3]** - No parallel GC on GraalVM native image.

**[4]** - On GraalVM there is no true "old" and "eden" spaces. Everything is allocated in linked heap chunks.

**[5]** - No dynamic class loading on GraalVM.

**[6]** - Possible but not implemented on GraalVM, as of Nov. 2025.
Loading