RFR: 8356848: Separate Metaspace and GC printing [v2]
Joel Sikström
jsikstro at openjdk.org
Thu May 15 08:26:51 UTC 2025
On Tue, 13 May 2025 16:14:06 GMT, Joel Sikström <jsikstro at openjdk.org> wrote:
>> Hello,
>>
>> The goal of this RFE is to separate Metaspace printing from GC printing. The main reason Metaspace and GC printing is coupled the way it is right now is because historically, the permanent generation (PermGen), which was replaced by Metaspace, was part of the GC heap. Hence, it made sense to also print info about the PermGen when printing the GC heap.
>>
>> With Metaspace replacing the PermGen, which uses memory that is separate from the GC heap, the coupling has become more loose, raising the question if Metaspace should be printed somewhere else (maybe when printing *other* Metaspace stuff?). A reason to still print Metaspace when printing the heap is that the GC is responsible for unloading classes and nmethods, which means it makes sense to print Metaspace information in connection to when a GC is performed.
>>
>> To better reflect the current state of the JVM, I propose we make the following changes to separate Metaspace from GC printing:
>> * Move Metaspace printing from HeapInfoDCmd to MetaspaceDCmd.
>> * Move Metaspace printing from the "Heap:" section to "Metaspace:" section in vmError.cpp (hs_err files, the VM.info jcmd and -XX:+PrintVMInfoAtExit).
>> * Use gc+exit instead of gc+heap+exit as tags for the LogTarget during exit printing to reflect that it's not only the heap being printed.
>> * And the largest change in terms of LOC, separate Metaspace and GC Heap in the periodic printing before/after GC invocation(s). The periodic printing is also recorded in a ring buffer, which is printed in vmError.cpp.
>>
>> Testing:
>> * GHA, Oracle's tier 1-4
>> * Manuel inspection of printed content
>
> Joel Sikström has updated the pull request incrementally with one additional commit since the last revision:
>
> HeapInfoTest should check that GC.heap_info actually runs
With feedback from @stefank, I've flipped the order of Metaspace Usage and GC Heap Usage in hs_err files so that GC Heap Usage comes first. Example output:
GC Heap Usage History (70 events):
Event: 0,896 {heap Before GC invocations=0 (full 0):
ZHeap used 860M, capacity 860M, max capacity 9216M
Cache 0M (0)
}
...
Metaspace Usage History (70 events):
Event: 0,896 {metaspace Before GC invocations=0 (full 0):
Metaspace used 18663K, committed 19008K, reserved 1114112K
class space used 1601K, committed 1728K, reserved 1048576K
}
...
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25214#issuecomment-2882994637
More information about the hotspot-dev
mailing list