jmx-dev RFR: 8368527: JMX: Add an MXBeans method to query GC CPU time
Jonas Norlinder
duke at openjdk.org
Sat Sep 27 17:04:33 UTC 2025
Hi all,
This PR augments the CPU time sampling measurement capabilities that a user can perform from Java code with the addition of `MemoryMXBean.getGcCpuTime()`. With this patch it will be possible for a user to measure process and GC CPU time during critical section or iterations in benchmarks to name a few. This new method complements the existing `OperatingSystemMXBean.getProcessCpuTime()` for a refined understanding.
`CollectedHeap::gc_threads_do` may operate on terminated GC threads during shutdown, but thanks to JDK-8366865 by @walulyai we can piggyback on the new `Universe::is_shutting_down`. I have implemented a stress-test `test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java` that may identify reading CPU time of terminated threads. Synchronizing on `Universe::is_shutting_down` and `Heap_lock` resolves this problem.
FWIW; To my understanding we don't want to add a `Universe::is_shutting_down` check in gc_threads_do as this may introduce a performance penalty that is unacceptable, therefore we must be careful about the few places where external users call upon gc_threads_do and may race with a terminating VM.
Tested: test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java, jdk/javax/management/mxbean hotspot/jtreg/vmTestbase/nsk/monitoring on Linux x64, Linux aarch64, Windows x64, macOS x64 and macOS aarch64 with release and fastdebug.
-------------
Commit messages:
- Remove extra new line
- Add GC CPU MXBeans
Changes: https://git.openjdk.org/jdk/pull/27537/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27537&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8368527
Stats: 146 lines in 11 files changed: 142 ins; 1 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/27537.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27537/head:pull/27537
PR: https://git.openjdk.org/jdk/pull/27537
More information about the jmx-dev
mailing list