going thru a gc-log of a box that had several Full-GCs (OpenJDK 64-Bit Server VM (11.0.3+7-201905271830) on CentOS 6.9 with 20 cores and 132GB) and i came across some really surprising times for the output from -Xlog:gc*=info,gc+classhisto*=trace: (notice the timestamps)
[2020-02-29T*02:39:42.403*+0000][trace][gc,classhisto,start] Class Histogram (before full gc) [2020-02-29T02:40:37.810+0000][trace][gc,classhisto ] GC(790) num #instances #bytes class name (module) ... [2020-02-29T02:40:37.877+0000][trace][gc,classhisto ] GC(790) Total 1714972606 101189395832 [2020-02-29T*02:40:37.878*+0000][trace][gc,classhisto ] GC(790) Class Histogram (before full gc) *55475.179ms* [2020-02-29T02:40:37.878+0000][info ][gc,task ] GC(790) Using 15 workers of 15 for full compaction [2020-02-29T02:40:37.878+0000][info ][gc,start ] GC(790) Pause Full (G1 Evacuation Pause) [2020-02-29T02:40:37.954+0000][info ][gc,phases,start ] GC(790) Phase 1: Mark live objects [2020-02-29T02:40:44.115+0000][info ][gc,stringtable ] GC(790) Cleaned string and symbol table, strings: 76105 processed, 198 removed, symbols: 254466 processed, 0 removed [2020-02-29T02:40:44.115+0000][info ][gc,phases ] GC(790) Phase 1: Mark live objects 6160.375ms [2020-02-29T02:40:44.115+0000][info ][gc,phases,start ] GC(790) Phase 2: Prepare for compaction [2020-02-29T02:40:47.010+0000][info ][gc,phases ] GC(790) Phase 2: Prepare for compaction 2894.766ms [2020-02-29T02:40:47.010+0000][info ][gc,phases,start ] GC(790) Phase 3: Adjust pointers [2020-02-29T02:40:52.241+0000][info ][gc,phases ] GC(790) Phase 3: Adjust pointers 5231.599ms [2020-02-29T02:40:52.241+0000][info ][gc,phases,start ] GC(790) Phase 4: Compact heap [2020-02-29T02:40:56.657+0000][info ][gc,phases ] GC(790) Phase 4: Compact heap 4415.453ms [2020-02-29T02:40:56.730+0000][info ][gc,heap ] GC(790) Eden regions: 0->0(161) [2020-02-29T02:40:56.730+0000][info ][gc,heap ] GC(790) Survivor regions: 0->0(21) [2020-02-29T02:40:56.730+0000][info ][gc,heap ] GC(790) Old regions: 3112->2776 [2020-02-29T02:40:56.730+0000][info ][gc,heap ] GC(790) Humongous regions: 115->24 [2020-02-29T02:40:56.730+0000][info ][gc,metaspace ] GC(790) Metaspace: 104224K->104200K(106496K) [2020-02-29T02:40:56.730+0000][info ][gc ] GC(790) Pause Full (G1 Evacuation Pause) 103045M->89309M(103264M) *18852.025ms* [2020-02-29T02:40:56.730+0000][trace][gc,classhisto,start] Class Histogram (after full gc) [2020-02-29T02:41:39.715+0000][trace][gc,classhisto ] GC(790) num #instances #bytes class name (module) ... [2020-02-29T02:41:39.779+0000][trace][gc,classhisto ] GC(790) Total 1628116065 93487648064 [2020-02-29T02:41:39.780+0000][trace][gc,classhisto ] GC(790) Class Histogram (after full gc) *43049.823ms* [2020-02-29T02:41:39.780+0000][info ][gc,cpu ] GC(790) User=372.08s Sys=0.09s *Real=117.36s* did the JVM really take 55.4 SECONDS to generate the pre-full-GC and 43 seconds to generate the post-full-GC class-histograms? for a GC that would have only taken 18.8 seconds otherwise? i mean, sure, avoid full-GC at all costs but was it always so expensive to get the class histogram? this feature has helped us narrow down a lot of memory issues; it would be a shame to have to disable it because it makes Full-GCs 6x slower. any info/suggestions gratefully accepted.
_______________________________________________ hotspot-gc-use mailing list hotspot-gc-use@openjdk.java.net https://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use