Skip to content

Commit 25610d5

Browse files
committed
new metrics for concurrent collections: max + avg tenured / total heap after concurrent collection
1 parent cedb6e9 commit 25610d5

File tree

12 files changed

+1303
-1086
lines changed

12 files changed

+1303
-1086
lines changed

README

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ to generate a report (including optional chart image file).
1616

1717
Supported verbose:gc formats are:
1818

19-
- Oracle JDK 1.8 (experimental support) -Xloggc:<file> [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
19+
- Oracle JDK 1.8 -Xloggc:<file> [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
2020
- Sun / Oracle JDK 1.7 with option -Xloggc:<file> [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
2121
- Sun / Oracle JDK 1.6 with option -Xloggc:<file> [-XX:+PrintGCDetails] [-XX:+PrintGCDateStamps]
2222
- Sun JDK 1.4/1.5 with the option -Xloggc:<file> [-XX:+PrintGCDetails]
@@ -106,7 +106,11 @@ Summary
106106

107107
- Footprint:
108108
o Maximal amount of memory allocated
109-
- Max heap after full gc:
109+
- Max heap after conc GC:
110+
o Max used heap after concurrent gc.
111+
- Max tenured after conc GC:
112+
o Max used tenured heap after concurrent gc (followed by % of max tenured / % of max total heap).
113+
- Max heap after full GC:
110114
o Max used heap after full gc. Indicates max live object size and can help to determine heap size.
111115
- Freed Memory:
112116
o Total amount of memory that has been freed
@@ -138,7 +142,15 @@ Memory
138142
o Max memory usage / allocation in young space
139143
- Perm heap (usage / alloc max):
140144
o Max memory usage / allocation in perm space
141-
- Max heap after full gc:
145+
- Max tenured after conc GC:
146+
o see in "summary" section
147+
- Avg tenured after conc GC:
148+
o average size of tenured heap after concurrent collection
149+
- Max heap after conc GC:
150+
o see in "summary" section
151+
- Avg heap after conc GC:
152+
o average size of concurrent heap after concurrent collection
153+
- Max heap after full GC:
142154
o see in "summary" section
143155
- Avg after full GC:
144156
o The average heap memory consumption after a full collection

src/main/java/com/tagtraum/perf/gcviewer/ModelPanel.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ public MemoryTab() {
217217
addEntry(LocalisationHelper.getString("data_panel_memory_tenured_heap_usage"));
218218
addEntry(LocalisationHelper.getString("data_panel_memory_young_heap_usage"));
219219
addEntry(LocalisationHelper.getString("data_panel_memory_perm_heap_usage"));
220+
addEntry(LocalisationHelper.getString("data_panel_tenuredafterconcgc_max"));
221+
addEntry(LocalisationHelper.getString("data_panel_tenuredafterconcgc_avg"));
222+
addEntry(LocalisationHelper.getString("data_panel_footprintafterconcgc_max"));
223+
addEntry(LocalisationHelper.getString("data_panel_footprintafterconcgc_avg"));
220224
addEntry(LocalisationHelper.getString("data_panel_footprintafterfullgc_max"));
221225
addEntry(LocalisationHelper.getString("data_panel_footprintafterfullgc_avg"));
222226
addEntry(LocalisationHelper.getString("data_panel_footprintaftergc_avg"));
@@ -246,6 +250,8 @@ public void setModel(GCModel model) {
246250
boolean gcSlopeDataAvailable = model.getRelativePostGCIncrease().getN() != 0;
247251
boolean initiatingOccFractionAvailable = model.getCmsInitiatingOccupancyFraction().getN() > 0;
248252
boolean promotionAvailable = model.getPromotion().getN() > 0;
253+
boolean postConcurrentUsedSizeAvailable = model.getPostConcurrentCycleHeapUsedSizes().getN() > 0;
254+
boolean postConcurrentUsedTenuredSizeAvailable = model.getPostConcurrentCycleTenuredUsedSizes().getN() > 0;
249255

250256
updateValue(LocalisationHelper.getString("data_panel_memory_heap_usage"),
251257
footprintFormatter.format(model.getHeapUsedSizes().getMax())
@@ -267,6 +273,25 @@ public void setModel(GCModel model) {
267273
+ " (" + percentFormatter.format(model.getPermUsedSizes().getMax() / (double)model.getPermAllocatedSizes().getMax() * 100) + "%)"
268274
+ " / " + footprintFormatter.format(model.getPermAllocatedSizes().getMax()) : "n/a",
269275
model.getPermAllocatedSizes().getN() > 0);
276+
updateValue(LocalisationHelper.getString("data_panel_footprintafterconcgc_max"),
277+
postConcurrentUsedSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleHeapUsedSizes().getMax())
278+
+ " (" + percentFormatter.format(model.getPostConcurrentCycleHeapUsedSizes().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",
279+
postConcurrentUsedSizeAvailable);
280+
updateValue(LocalisationHelper.getString("data_panel_footprintafterconcgc_avg"),
281+
postConcurrentUsedSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleHeapUsedSizes().average())
282+
+ " (\u03c3=" + sigmaMemoryFormat(model.getPostConcurrentCycleHeapUsedSizes().standardDeviation()) +")" : "n/a",
283+
postConcurrentUsedSizeAvailable && isSignificant(model.getPostConcurrentCycleHeapUsedSizes().average(),
284+
model.getPostConcurrentCycleHeapUsedSizes().standardDeviation()));
285+
updateValue(LocalisationHelper.getString("data_panel_tenuredafterconcgc_max"),
286+
postConcurrentUsedTenuredSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax())
287+
+ " (" + percentFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax() / (double)model.getTenuredAllocatedSizes().getMax() * 100) + "% / "
288+
+ percentFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",
289+
postConcurrentUsedTenuredSizeAvailable);
290+
updateValue(LocalisationHelper.getString("data_panel_tenuredafterconcgc_avg"),
291+
postConcurrentUsedTenuredSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().average())
292+
+ " (\u03c3=" + sigmaMemoryFormat(model.getPostConcurrentCycleTenuredUsedSizes().standardDeviation()) +")" : "n/a",
293+
postConcurrentUsedTenuredSizeAvailable && isSignificant(model.getPostConcurrentCycleTenuredUsedSizes().average(),
294+
model.getPostConcurrentCycleTenuredUsedSizes().standardDeviation()));
270295
updateValue(LocalisationHelper.getString("data_panel_footprintafterfullgc_max"),
271296
fullGcDataAvailable ? footprintFormatter.format(model.getFootprintAfterFullGC().getMax())
272297
+ " (" + percentFormatter.format(model.getFootprintAfterFullGC().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",
@@ -435,6 +460,8 @@ public SummaryTab() {
435460
super();
436461

437462
addEntry(LocalisationHelper.getString("data_panel_memory_heap_usage"));
463+
addEntry(LocalisationHelper.getString("data_panel_footprintafterconcgc_max"));
464+
addEntry(LocalisationHelper.getString("data_panel_tenuredafterconcgc_max"));
438465
addEntry(LocalisationHelper.getString("data_panel_footprintafterfullgc_max"));
439466
addEntry(LocalisationHelper.getString("data_panel_freedmemory"));
440467
addEntry(LocalisationHelper.getString("data_panel_freedmemorypermin"));
@@ -449,12 +476,23 @@ public SummaryTab() {
449476

450477
public void setModel(GCModel model) {
451478
boolean fullGcDataAvailable = model.getFootprintAfterFullGC().getN() > 0;
479+
boolean postConcurrentUsedSizeAvailable = model.getPostConcurrentCycleHeapUsedSizes().getN() > 0;
480+
boolean postConcurrentUsedTenuredSizeAvailable = model.getPostConcurrentCycleTenuredUsedSizes().getN() > 0;
452481

453482
updateValue(LocalisationHelper.getString("data_panel_memory_heap_usage"),
454483
footprintFormatter.format(model.getHeapUsedSizes().getMax())
455484
+ " (" + percentFormatter.format(model.getHeapUsedSizes().getMax() / (double)model.getHeapAllocatedSizes().getMax() * 100) + "%)"
456485
+ " / " + footprintFormatter.format(model.getHeapAllocatedSizes().getMax()),
457486
true);
487+
updateValue(LocalisationHelper.getString("data_panel_footprintafterconcgc_max"),
488+
postConcurrentUsedSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleHeapUsedSizes().getMax())
489+
+ " (" + percentFormatter.format(model.getPostConcurrentCycleHeapUsedSizes().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",
490+
postConcurrentUsedSizeAvailable);
491+
updateValue(LocalisationHelper.getString("data_panel_tenuredafterconcgc_max"),
492+
postConcurrentUsedTenuredSizeAvailable ? footprintFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax())
493+
+ " (" + percentFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax() / (double)model.getTenuredAllocatedSizes().getMax() * 100) + "% / "
494+
+ percentFormatter.format(model.getPostConcurrentCycleTenuredUsedSizes().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",
495+
postConcurrentUsedTenuredSizeAvailable);
458496
updateValue(LocalisationHelper.getString("data_panel_footprintafterfullgc_max"),
459497
fullGcDataAvailable ? footprintFormatter.format(model.getFootprintAfterFullGC().getMax())
460498
+ " (" + percentFormatter.format(model.getFootprintAfterFullGC().getMax() / (double)model.getFootprint() * 100) + "%)": "n/a",

0 commit comments

Comments
 (0)