< prev index next >

test/gc/g1/TestGCLogMessages.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2014, 2015 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 21,136 **** * questions. */ /* * @test TestGCLogMessages ! * @bug 8035406 8027295 8035398 8019342 8027959 * @summary Ensure that the PrintGCDetails output for a minor GC with G1 * includes the expected necessary messages. * @key gc * @library /testlibrary */ import com.oracle.java.testlibrary.ProcessTools; import com.oracle.java.testlibrary.OutputAnalyzer; public class TestGCLogMessages { public static void main(String[] args) throws Exception { ! testNormalLogs(); ! testWithToSpaceExhaustionLogs(); } ! private static void testNormalLogs() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-Xmx10M", GCTest.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); ! ! output.shouldNotContain("[Redirty Cards"); ! output.shouldNotContain("[Parallel Redirty"); ! output.shouldNotContain("[Redirtied Cards"); ! output.shouldNotContain("[Code Root Purge"); ! output.shouldNotContain("[String Dedup Fixup"); ! output.shouldNotContain("[Young Free CSet"); ! output.shouldNotContain("[Non-Young Free CSet"); ! output.shouldNotContain("[Humongous Reclaim"); output.shouldHaveExitValue(0); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-Xmx10M", "-XX:+PrintGCDetails", GCTest.class.getName()); output = new OutputAnalyzer(pb.start()); ! ! output.shouldContain("[Redirty Cards"); ! output.shouldNotContain("[Parallel Redirty"); ! output.shouldNotContain("[Redirtied Cards"); ! output.shouldContain("[Code Root Purge"); ! output.shouldContain("[String Dedup Fixup"); ! output.shouldNotContain("[Young Free CSet"); ! output.shouldNotContain("[Non-Young Free CSet"); ! output.shouldContain("[Humongous Reclaim"); ! output.shouldNotContain("[Humongous Total"); ! output.shouldNotContain("[Humongous Candidate"); ! output.shouldNotContain("[Humongous Reclaimed"); ! output.shouldHaveExitValue(0); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UnlockExperimentalVMOptions", "-XX:G1LogLevel=finest", GCTest.class.getName()); output = new OutputAnalyzer(pb.start()); ! ! output.shouldContain("[Redirty Cards"); ! output.shouldContain("[Parallel Redirty"); ! output.shouldContain("[Redirtied Cards"); ! output.shouldContain("[Code Root Purge"); ! output.shouldContain("[String Dedup Fixup"); ! output.shouldContain("[Young Free CSet"); ! output.shouldContain("[Non-Young Free CSet"); ! output.shouldContain("[Humongous Reclaim"); ! output.shouldContain("[Humongous Total"); ! output.shouldContain("[Humongous Candidate"); ! output.shouldContain("[Humongous Reclaimed"); output.shouldHaveExitValue(0); } ! private static void testWithToSpaceExhaustionLogs() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", ! "-Xmx10M", ! "-Xmn5M", "-XX:+PrintGCDetails", GCTestWithToSpaceExhaustion.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); ! output.shouldContain("[Evacuation Failure"); ! output.shouldNotContain("[Recalculate Used"); ! output.shouldNotContain("[Remove Self Forwards"); ! output.shouldNotContain("[Restore RemSet"); output.shouldHaveExitValue(0); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", ! "-Xmx10M", ! "-Xmn5M", "-XX:+PrintGCDetails", "-XX:+UnlockExperimentalVMOptions", "-XX:G1LogLevel=finest", GCTestWithToSpaceExhaustion.class.getName()); output = new OutputAnalyzer(pb.start()); ! output.shouldContain("[Evacuation Failure"); ! output.shouldContain("[Recalculate Used"); ! output.shouldContain("[Remove Self Forwards"); ! output.shouldContain("[Restore RemSet"); output.shouldHaveExitValue(0); } static class GCTest { private static byte[] garbage; --- 21,165 ---- * questions. */ /* * @test TestGCLogMessages ! * @bug 8035406 8027295 8035398 8019342 8027959 8027962 * @summary Ensure that the PrintGCDetails output for a minor GC with G1 * includes the expected necessary messages. * @key gc * @library /testlibrary */ import com.oracle.java.testlibrary.ProcessTools; import com.oracle.java.testlibrary.OutputAnalyzer; public class TestGCLogMessages { + + private enum Level { + OFF, FINER, FINEST; + public boolean lessOrEqualTo(Level other) { + return this.compareTo(other) < 0; + } + } + + private class LogMessageWithLevel { + String message; + Level level; + + public LogMessageWithLevel(String message, Level level) { + this.message = message; + this.level = level; + } + }; + + private LogMessageWithLevel allLogMessages[] = new LogMessageWithLevel[] { + // Ext Root Scan + new LogMessageWithLevel("Thread Roots (ms)", Level.FINEST), + new LogMessageWithLevel("StringTable Roots (ms)", Level.FINEST), + new LogMessageWithLevel("Universe Roots (ms)", Level.FINEST), + new LogMessageWithLevel("JNI Handles Roots (ms)", Level.FINEST), + new LogMessageWithLevel("ObjectSynchronizer Roots (ms)", Level.FINEST), + new LogMessageWithLevel("FlatProfiler Roots", Level.FINEST), + new LogMessageWithLevel("Management Roots", Level.FINEST), + new LogMessageWithLevel("SystemDictionary Roots", Level.FINEST), + new LogMessageWithLevel("CLDG Roots", Level.FINEST), + new LogMessageWithLevel("JVMTI Roots", Level.FINEST), + new LogMessageWithLevel("CodeCache Roots", Level.FINEST), + new LogMessageWithLevel("SATB Filtering", Level.FINEST), + new LogMessageWithLevel("CM RefProcessor Roots", Level.FINEST), + new LogMessageWithLevel("Wait For Strong CLD", Level.FINEST), + new LogMessageWithLevel("Weak CLD Roots", Level.FINEST), + // Redirty Cards + new LogMessageWithLevel("Redirty Cards", Level.FINER), + new LogMessageWithLevel("Parallel Redirty", Level.FINEST), + new LogMessageWithLevel("Redirtied Cards", Level.FINEST), + // Misc Top-level + new LogMessageWithLevel("Code Root Purge", Level.FINER), + new LogMessageWithLevel("String Dedup Fixup", Level.FINER), + // Free CSet + new LogMessageWithLevel("Young Free CSet", Level.FINEST), + new LogMessageWithLevel("Non-Young Free CSet", Level.FINEST), + // Humongous Eager Reclaim + new LogMessageWithLevel("Humongous Reclaim", Level.FINER), + }; + + void checkMessagesAtLevel(OutputAnalyzer output, LogMessageWithLevel messages[], Level level) throws Exception { + for (LogMessageWithLevel l : messages) { + if (level.lessOrEqualTo(l.level)) { + output.shouldNotContain(l.message); + } else { + output.shouldContain(l.message); + } + } + } + public static void main(String[] args) throws Exception { ! new TestGCLogMessages().testNormalLogs(); ! new TestGCLogMessages().testWithToSpaceExhaustionLogs(); } ! private void testNormalLogs() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-Xmx10M", GCTest.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); ! checkMessagesAtLevel(output, allLogMessages, Level.OFF); output.shouldHaveExitValue(0); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-Xmx10M", "-XX:+PrintGCDetails", GCTest.class.getName()); output = new OutputAnalyzer(pb.start()); ! checkMessagesAtLevel(output, allLogMessages, Level.FINER); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:+UseStringDeduplication", "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UnlockExperimentalVMOptions", "-XX:G1LogLevel=finest", GCTest.class.getName()); output = new OutputAnalyzer(pb.start()); ! checkMessagesAtLevel(output, allLogMessages, Level.FINEST); output.shouldHaveExitValue(0); } ! LogMessageWithLevel exhFailureMessages[] = new LogMessageWithLevel[] { ! new LogMessageWithLevel("Evacuation Failure", Level.FINER), ! new LogMessageWithLevel("Recalculate Used", Level.FINEST), ! new LogMessageWithLevel("Remove Self Forwards", Level.FINEST), ! new LogMessageWithLevel("Restore RemSet", Level.FINEST), ! }; ! ! private void testWithToSpaceExhaustionLogs() throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", ! "-Xmx32M", ! "-Xmn16M", "-XX:+PrintGCDetails", GCTestWithToSpaceExhaustion.class.getName()); OutputAnalyzer output = new OutputAnalyzer(pb.start()); ! checkMessagesAtLevel(output, exhFailureMessages, Level.FINER); output.shouldHaveExitValue(0); pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", ! "-Xmx32M", ! "-Xmn16M", "-XX:+PrintGCDetails", "-XX:+UnlockExperimentalVMOptions", "-XX:G1LogLevel=finest", GCTestWithToSpaceExhaustion.class.getName()); output = new OutputAnalyzer(pb.start()); ! checkMessagesAtLevel(output, exhFailureMessages, Level.FINEST); output.shouldHaveExitValue(0); } static class GCTest { private static byte[] garbage;
*** 146,161 **** static class GCTestWithToSpaceExhaustion { private static byte[] garbage; private static byte[] largeObject; public static void main(String [] args) { ! largeObject = new byte[5*1024*1024]; System.out.println("Creating garbage"); // create 128MB of garbage. This should result in at least one GC, // some of them with to-space exhaustion. for (int i = 0; i < 1024; i++) { garbage = new byte[128 * 1024]; } System.out.println("Done"); } } } --- 175,191 ---- static class GCTestWithToSpaceExhaustion { private static byte[] garbage; private static byte[] largeObject; public static void main(String [] args) { ! largeObject = new byte[16*1024*1024]; System.out.println("Creating garbage"); // create 128MB of garbage. This should result in at least one GC, // some of them with to-space exhaustion. for (int i = 0; i < 1024; i++) { garbage = new byte[128 * 1024]; } System.out.println("Done"); } } } +
< prev index next >