jmx-dev RFR: 8368527: JMX: Add an MXBeans method to query GC CPU time [v2]
Kevin Walls
kevinw at openjdk.org
Wed Oct 15 10:08:23 UTC 2025
On Sun, 5 Oct 2025 13:00:44 GMT, Jonas Norlinder <duke at openjdk.org> wrote:
>> 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.
>
> Jonas Norlinder has updated the pull request incrementally with one additional commit since the last revision:
>
> Move from j.l.management to com.sun.management etc.
A possible more generic api doc:
/**
* Returns the CPU time used by garbage collection.
*
* <p> This is the CPU time used by all garbage collection activity,
* including any overhead, which means the result may be non-zero
* even if no GC has occurred.
*
* This method may return {@code -1} if the
* platform does not support this operation or the information is not available at any time.
*
* @implNote Reported time will include relevant implementation-specific details such as
* driver threads, workers, VM Operations and string deduplication (if enabled).
* This method will return -1 if called during shutdown.
*
* @return the total accumulated CPU time for garbage collection
* in nanoseconds, or -1
*
* @since 26
*/
public long getTotalGcCpuTime();
-------------
PR Comment: https://git.openjdk.org/jdk/pull/27537#issuecomment-3405609355
More information about the jmx-dev
mailing list