Skip to content

Commit 29eaee7

Browse files
committed
start supporting -XX:+PrintFLSStatistics (ignore output)
1 parent dc0b84b commit 29eaee7

File tree

4 files changed

+146
-1
lines changed

4 files changed

+146
-1
lines changed

src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderSun1_6_0.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.logging.Logger;
1313
import java.util.regex.Matcher;
1414
import java.util.regex.Pattern;
15-
1615
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
1716
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.CollectionType;
1817
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Concurrency;
@@ -55,6 +54,7 @@
5554
* <li>-XX:PrintCMSStatistics=2 (output ignored)</li>
5655
* <li>-XX:+PrintReferenceGC (output ignored)</li>
5756
* <li>-XX:+PrintCMSInitiationStatistics (output ignored)</li>
57+
* <li>-XX:+PrintFLSStatistics (output ignored)</li>
5858
* </ul>
5959
* </p>
6060
* @author <a href="mailto:[email protected]">Hendrik Schreiber</a>
@@ -68,6 +68,9 @@ public class DataReaderSun1_6_0 extends AbstractDataReaderSun {
6868

6969
private static final String UNLOADING_CLASS = "[Unloading class ";
7070
private static final String APPLICATION_TIME = "Application time:";
71+
private static final String BEFORE_GC = "Before GC:"; // -XX:+PrintFLSStatistics=1
72+
private static final String AFTER_GC = "After GC:"; // -XX:+PrintFLSStatistics=1
73+
7174
private static final List<String> EXCLUDE_STRINGS = new LinkedList<String>();
7275

7376
static {
@@ -88,6 +91,19 @@ public class DataReaderSun1_6_0 extends AbstractDataReaderSun {
8891
EXCLUDE_STRINGS.add("cms_allocation_rate"); // -XX:+PrintCMSInitiationStatistics
8992
EXCLUDE_STRINGS.add("occupancy"); // -XX:+PrintCMSInitiationStatistics
9093
EXCLUDE_STRINGS.add("initiating"); // -XX:+PrintCMSInitiationStatistics
94+
EXCLUDE_STRINGS.add("Statistics"); // -XX:+PrintFLSStatistics=1
95+
EXCLUDE_STRINGS.add("----------------"); // -XX:+PrintFLSStatistics=1
96+
EXCLUDE_STRINGS.add("Total Free Space:"); // -XX:+PrintFLSStatistics=1
97+
EXCLUDE_STRINGS.add("Max Chunk Size:"); // -XX:+PrintFLSStatistics=1
98+
EXCLUDE_STRINGS.add("Number of Blocks:"); // -XX:+PrintFLSStatistics=1
99+
EXCLUDE_STRINGS.add("Av. Block Size:"); // -XX:+PrintFLSStatistics=1
100+
EXCLUDE_STRINGS.add("Tree Height:"); // -XX:+PrintFLSStatistics=1
101+
EXCLUDE_STRINGS.add(BEFORE_GC); // -XX:+PrintFLSStatistics=1
102+
EXCLUDE_STRINGS.add(AFTER_GC); // -XX:+PrintFLSStatistics=1
103+
EXCLUDE_STRINGS.add("CMS: Large "); // -XX:+PrintFLSStatistics=1
104+
EXCLUDE_STRINGS.add(" free"); // -XX:+PrintFLSStatistics=2
105+
EXCLUDE_STRINGS.add("size["); // -XX:+PrintFLSStatistics=2
106+
EXCLUDE_STRINGS.add("demand"); // -XX:+PrintFLSStatistics=2
91107
}
92108

93109
private static final String EVENT_YG_OCCUPANCY = "YG occupancy";
@@ -269,6 +285,15 @@ else if (line.indexOf(APPLICATION_TIME) > 0) {
269285
if (line.indexOf(PRINT_REFERENCE_GC_INDICATOR) > 0) {
270286
line = filterAwayReferenceGc(line);
271287
}
288+
if (line.endsWith(BEFORE_GC)) {
289+
beginningOfLine.addFirst(line.substring(0, line.indexOf(BEFORE_GC)));
290+
continue;
291+
}
292+
else if (line.endsWith(AFTER_GC)) {
293+
String beginning = beginningOfLine.removeFirst();
294+
beginningOfLine.addFirst(beginning + line.substring(0, line.indexOf(AFTER_GC)));
295+
continue;
296+
}
272297

273298
if (isCmsScavengeBeforeRemark(line)) {
274299
// This is the case, when option -XX:+CMSScavengeBeforeRemark is used.

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_7_0.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,4 +372,38 @@ public void cmsPrintGCApplicationStoppedTimeWithoutTimestampsTenuringDist() thro
372372
equalTo("2012-04-26T23:59:51.011"));
373373
assertThat("first timestamp", model.getFirstPauseTimeStamp(), closeTo(33395.153, 0.00001));
374374
}
375+
376+
@Test
377+
public void cmsPrintFlsStatistics1() throws Exception {
378+
TestLogHandler handler = new TestLogHandler();
379+
handler.setLevel(Level.WARNING);
380+
IMP_LOGGER.addHandler(handler);
381+
DATA_READER_FACTORY_LOGGER.addHandler(handler);
382+
383+
InputStream in = getInputStream("SampleSun1_7_0CmsPrintFlsStats1.txt");
384+
DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_7);
385+
GCModel model = reader.read();
386+
387+
assertThat("GC count", model.size(), is(1));
388+
assertThat("pause", model.get(0).getPause(), closeTo(0.0030039, 0.00000001));
389+
assertThat("number of parse problems", handler.getCount(), is(0));
390+
391+
}
392+
393+
@Test
394+
public void cmsPrintFlsStatistics2() throws Exception {
395+
TestLogHandler handler = new TestLogHandler();
396+
handler.setLevel(Level.WARNING);
397+
IMP_LOGGER.addHandler(handler);
398+
DATA_READER_FACTORY_LOGGER.addHandler(handler);
399+
400+
InputStream in = getInputStream("SampleSun1_7_0CmsPrintFlsStats2.txt");
401+
DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_7);
402+
GCModel model = reader.read();
403+
404+
assertThat("GC count", model.size(), is(1));
405+
assertThat("pause", model.get(0).getPause(), closeTo(0.0054252, 0.00000001));
406+
assertThat("number of parse problems", handler.getCount(), is(0));
407+
408+
}
375409
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2014-10-20T21:03:07.419+0200: 0.356: [GCBefore GC:
2+
Statistics for BinaryTreeDictionary:
3+
------------------------------------
4+
Total Free Space: 7289486
5+
Max Chunk Size: 7252328
6+
Number of Blocks: 41
7+
Av. Block Size: 177792
8+
Tree Height: 13
9+
Before GC:
10+
Statistics for BinaryTreeDictionary:
11+
------------------------------------
12+
Total Free Space: 0
13+
Max Chunk Size: 0
14+
Number of Blocks: 0
15+
Tree Height: 0
16+
2014-10-20T21:03:07.419+0200: 0.356: [ParNew: 4878K->492K(4928K), 0.0028687 secs] 69671K->68647K(98300K)After GC:
17+
Statistics for BinaryTreeDictionary:
18+
------------------------------------
19+
Total Free Space: 6428906
20+
Max Chunk Size: 6391748
21+
Number of Blocks: 41
22+
Av. Block Size: 156802
23+
Tree Height: 13
24+
After GC:
25+
Statistics for BinaryTreeDictionary:
26+
------------------------------------
27+
Total Free Space: 0
28+
Max Chunk Size: 0
29+
Number of Blocks: 0
30+
Tree Height: 0
31+
, 0.0030039 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
2014-10-20T21:48:57.565+0200: 0.199: [GCBefore GC:
2+
Statistics for BinaryTreeDictionary:
3+
------------------------------------
4+
Total Free Space: 2801664
5+
Max Chunk Size: 2801664
6+
Number of Blocks: 1
7+
Av. Block Size: 2801664
8+
Tree Height: 1
9+
Statistics for IndexedFreeLists:
10+
--------------------------------
11+
Total Free Space: 0
12+
Max Chunk Size: 0
13+
Number of Blocks: 0
14+
free=2801664 frag=0.0000
15+
Before GC:
16+
Statistics for BinaryTreeDictionary:
17+
------------------------------------
18+
Total Free Space: 0
19+
Max Chunk Size: 0
20+
Number of Blocks: 0
21+
Tree Height: 0
22+
Statistics for IndexedFreeLists:
23+
--------------------------------
24+
Total Free Space: 0
25+
Max Chunk Size: 0
26+
Number of Blocks: 0
27+
free=0 frag=0.0000
28+
2014-10-20T21:48:57.566+0200: 0.199: [ParNew: 4389K->509K(4928K), 0.0051086 secs] 4389K->4001K(15872K)After GC:
29+
Statistics for BinaryTreeDictionary:
30+
------------------------------------
31+
Total Free Space: 1891130
32+
Max Chunk Size: 1891130
33+
Number of Blocks: 1
34+
Av. Block Size: 1891130
35+
Tree Height: 1
36+
Statistics for IndexedFreeLists:
37+
--------------------------------
38+
Total Free Space: 0
39+
Max Chunk Size: 0
40+
Number of Blocks: 0
41+
free=1891130 frag=0.0000
42+
After GC:
43+
Statistics for BinaryTreeDictionary:
44+
------------------------------------
45+
Total Free Space: 0
46+
Max Chunk Size: 0
47+
Number of Blocks: 0
48+
Tree Height: 0
49+
Statistics for IndexedFreeLists:
50+
--------------------------------
51+
Total Free Space: 0
52+
Max Chunk Size: 0
53+
Number of Blocks: 0
54+
free=0 frag=0.0000
55+
, 0.0054252 secs] [Times: user=0.02 sys=0.05, real=0.01 secs]

0 commit comments

Comments
 (0)