RFR: JDK-8149035: Make the full_gc_dump() calls be recorded as part of the GC

Bengt Rutisson bengt.rutisson at oracle.com
Fri Feb 5 08:02:26 UTC 2016



On 2016-02-05 08:58, Stefan Johansson wrote:
> Looks good,

Thanks, Stefan!

Bengt

>
> StefanJ
>
> On 2016-02-04 16:26, Bengt Rutisson wrote:
>>
>> Hi everyone,
>>
>> Could I have a couple of reviews for this change?
>>
>> http://cr.openjdk.java.net/~brutisso/8149035/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8149035
>>
>> There are two actions that can be taken before and after a full GC. 
>> We can do a a heap dump and we can produce a class histogram.
>>
>> Both these actions now use their own GC ID and are logged and 
>> recorded as separate GCs. It is more natural that they are considered 
>> part of the full GC. Especially since they make up a significant part 
>> of the pause that the application experience.
>>
>> We should move these two actions inside of the GC pause reporting.
>>
>> The log now looks like this (truncated the class histogram for 
>> readability):
>>
>> [1,930s][info   ][gc,start    ] GC(1) Pause Full (System.gc()) (1,930s)
>> [1,930s][info   ][gc,start    ] GC(1) Heap Dump (before full gc) 
>> (1,930s)
>> [1,985s][info   ][gc          ] GC(1) Heap Dump (before full gc) 
>> (1,930s, 1,985s) 54,830ms
>> [1,994s][trace  ][gc,classhisto] GC(1)  num #instances #bytes class name
>> [1,994s][trace  ][gc,classhisto] GC(1) 
>> ----------------------------------------------
>> [1,994s][trace  ][gc,classhisto] GC(1)    1: 9059         601136 [B
>> [1,994s][trace  ][gc,classhisto] GC(1)    2: 466         480144 [I
>> [1,994s][trace  ][gc,classhisto] GC(1)    3: 1788         205608 
>> java.lang.Class
>> ...
>> [1,999s][trace  ][gc,classhisto] GC(1)  584: 1             16 
>> sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo_jdk_localedata
>> [1,999s][trace  ][gc,classhisto] GC(1) Total 40164 2413832
>> [1,999s][trace  ][gc,classhisto] GC(1) Class Histogram (before full 
>> gc) (1,985s, 1,999s) 13,485ms
>> [2,051s][info   ][gc,heap      ] GC(1) PSYoungGen: 2349K->0K(57344K)
>> [2,051s][info   ][gc,heap      ] GC(1) ParOldGen: 8K->1902K(65536K)
>> [2,051s][info   ][gc,metaspace ] GC(1) Metaspace: 
>> 10738K->10738K(1058816K)
>> [2,062s][trace  ][gc,classhisto] GC(1)  num #instances #bytes class name
>> [2,062s][trace  ][gc,classhisto] GC(1) 
>> ----------------------------------------------
>> [2,062s][trace  ][gc,classhisto] GC(1)    1: 9059         601136 [B
>> [2,062s][trace  ][gc,classhisto] GC(1)    2: 1788         205608 
>> java.lang.Class
>> [2,062s][trace  ][gc,classhisto] GC(1)    3: 8551         205224 
>> java.lang.String
>> ...
>> [2,067s][trace  ][gc,classhisto] GC(1)  584: 1             16 
>> sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo_jdk_localedata
>> [2,067s][trace  ][gc,classhisto] GC(1) Total 40093 1948480
>> [2,067s][trace  ][gc,classhisto] GC(1) Class Histogram (after full 
>> gc) (2,051s, 2,067s) 16,486ms
>> [2,067s][info   ][gc           ] GC(1) Pause Full (System.gc()) 
>> 2M->1M(120M) (1,930s, 2,067s) 137,013ms
>> [2,067s][info   ][gc,cpu       ] GC(1) User=0,87s Sys=0,03s Real=0,14s
>>
>> Several things had to be fixed for this to work properly:
>>
>> - The calls to pre/post_full_gc_dump()  in genCollectedHeap.cpp were 
>> moved to concurrentMarkSweepGeneration.cpp and tenuredGeneration.cpp
>> - In psMarkSweep and parallelCompact the calls to 
>> pre/post_full_gc_dump() were moved to inside the GC start/end.
>> - In CollectedHeap::full_gc_dump() the setup of a new GC id was removed.
>> - In CollectedHeap::full_gc_dump() the use of FormatBuffer was 
>> removed. This is necessary since the "title" passed to GCTraceTime is 
>> stored and used later to send a trace event.
>> - In heapInspection.cpp the logging for the title was moved to be 
>> able to use two print_cr calls to make it log the title with 
>> decorations properly.
>> - A log prefix was added for [gc, classhisto]
>>
>> Thanks,
>> Bengt
>




More information about the hotspot-gc-dev mailing list