Skip to content

Commit b06b031

Browse files
brunobatlaurit
andauthored
List JFR events used in metrics (#15332)
Co-authored-by: Lauri Tulmin <[email protected]>
1 parent 71f0e2d commit b06b031

File tree

1 file changed

+27
-13
lines changed
  • instrumentation/runtime-telemetry/runtime-telemetry-java17/library

1 file changed

+27
-13
lines changed

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/README.md

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,30 @@ default, and the telemetry each produces:
3535
<!-- DO NOT MANUALLY EDIT. Regenerate table following changes to instrumentation using ./gradlew generateDocs -->
3636
<!-- generateDocsStart -->
3737

38-
| JfrFeature | Default Enabled | Metrics |
39-
|---------------------------|-----------------|-------------------------------------------------------------------------------------------------------------------|
40-
| BUFFER_METRICS | `false` | `jvm.buffer.count`, `jvm.buffer.memory.limit`, `jvm.buffer.memory.used` |
41-
| CLASS_LOAD_METRICS | `false` | `jvm.class.count`, `jvm.class.loaded`, `jvm.class.unloaded` |
42-
| CONTEXT_SWITCH_METRICS | `true` | `jvm.cpu.context_switch` |
43-
| CPU_COUNT_METRICS | `true` | `jvm.cpu.limit` |
44-
| CPU_UTILIZATION_METRICS | `false` | `jvm.cpu.recent_utilization`, `jvm.system.cpu.utilization` |
45-
| GC_DURATION_METRICS | `false` | `jvm.gc.duration` |
46-
| LOCK_METRICS | `true` | `jvm.cpu.longlock` |
47-
| MEMORY_ALLOCATION_METRICS | `true` | `jvm.memory.allocation` |
48-
| MEMORY_POOL_METRICS | `false` | `jvm.memory.committed`, `jvm.memory.init`, `jvm.memory.limit`, `jvm.memory.used`, `jvm.memory.used_after_last_gc` |
49-
| NETWORK_IO_METRICS | `true` | `jvm.network.io`, `jvm.network.time` |
50-
| THREAD_METRICS | `false` | `jvm.thread.count` |
38+
**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.
39+
40+
| JfrFeature | Jfr Event names | Default Enabled | Metric names |
41+
|---------------------------|----------------------------------------------------------------------------------------------|-----------------|-------------------------------------------------------------------------------------------------------------------|
42+
| BUFFER_METRICS | `jdk.DirectBufferStatistics`[6] | `false` | `jvm.buffer.count`, `jvm.buffer.memory.limit`, `jvm.buffer.memory.used` |
43+
| CLASS_LOAD_METRICS | `jdk.ClassLoadingStatistics`[5] | `false` | `jvm.class.count`, `jvm.class.loaded`, `jvm.class.unloaded` |
44+
| CONTEXT_SWITCH_METRICS | `jdk.ThreadContextSwitchRate`[6] | `true` | `jvm.cpu.context_switch` |
45+
| CPU_COUNT_METRICS | `jdk.ContainerConfiguration` | `true` | `jvm.cpu.limit` |
46+
| CPU_UTILIZATION_METRICS | `jdk.CPULoad`[6] | `false` | `jvm.cpu.recent_utilization`, `jvm.system.cpu.utilization` |
47+
| GC_DURATION_METRICS | `jdk.G1GarbageCollection`[1], `jdk.OldGarbageCollection`[4], `jdk.YoungGarbageCollection`[4] | `false` | `jvm.gc.duration` |
48+
| LOCK_METRICS | `jdk.JavaMonitorWait` | `true` | `jvm.cpu.longlock` |
49+
| MEMORY_ALLOCATION_METRICS | `jdk.ObjectAllocationInNewTLAB`, `jdk.ObjectAllocationOutsideTLAB`[2] | `true` | `jvm.memory.allocation` |
50+
| 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` |
51+
| NETWORK_IO_METRICS | `jdk.SocketRead`, `jdk.SocketWrite` | `true` | `jvm.network.io`, `jvm.network.time` |
52+
| THREAD_METRICS | `jdk.JavaThreadStatistics` | `false` | `jvm.thread.count` |
53+
54+
**[1]** - G1 doesn't exist if you use the [community edition](https://www.graalvm.org/community/) for GraalVM native image.
55+
56+
**[2]** - Not applicable for GraalVM native image.
57+
58+
**[3]** - No parallel GC on GraalVM native image.
59+
60+
**[4]** - On GraalVM there is no true "old" and "eden" spaces. Everything is allocated in linked heap chunks.
61+
62+
**[5]** - No dynamic class loading on GraalVM.
63+
64+
**[6]** - Possible but not implemented on GraalVM, as of Nov. 2025.

0 commit comments

Comments
 (0)