From a87e8e52ea800b44eb801a9a3ccf2d3d7d72dd8c Mon Sep 17 00:00:00 2001 From: Jean Christophe Beyler Date: Fri, 5 Oct 2018 13:38:03 -0700 Subject: [PATCH] 8211123: GC Metaspace printing after full gc Move GC printing to after usage is calculated Co-authored-by: Jiapeng Li Reviewed-by: tschatzl, stuefe --- .../share/gc/shared/genCollectedHeap.cpp | 6 +- .../jtreg/gc/logging/TestMetaSpaceLog.java | 143 ++++++++++++++++++ test/hotspot/jtreg/gc/logging/testcases.jar | Bin 0 -> 18020 bytes 3 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java create mode 100644 test/hotspot/jtreg/gc/logging/testcases.jar diff --git a/src/hotspot/share/gc/shared/genCollectedHeap.cpp b/src/hotspot/share/gc/shared/genCollectedHeap.cpp index 71200926fb9..609c3b48eb0 100644 --- a/src/hotspot/share/gc/shared/genCollectedHeap.cpp +++ b/src/hotspot/share/gc/shared/genCollectedHeap.cpp @@ -649,9 +649,6 @@ void GenCollectedHeap::do_collection(bool full, // a whole heap collection. complete = complete || collected_old; - print_heap_change(young_prev_used, old_prev_used); - MetaspaceUtils::print_metaspace_change(metadata_prev_used); - // Adjust generation sizes. if (collected_old) { _old_gen->compute_new_size(); @@ -667,6 +664,9 @@ void GenCollectedHeap::do_collection(bool full, update_full_collections_completed(); } + print_heap_change(young_prev_used, old_prev_used); + MetaspaceUtils::print_metaspace_change(metadata_prev_used); + // Track memory usage and detect low memory after GC finishes MemoryService::track_memory_usage(); diff --git a/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java b/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java new file mode 100644 index 00000000000..4b967243b3e --- /dev/null +++ b/test/hotspot/jtreg/gc/logging/TestMetaSpaceLog.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, Google 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. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.List; +import java.util.function.Predicate; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import jdk.test.lib.Asserts; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import sun.hotspot.WhiteBox; + +/* + * @test TestMetaSpaceLog + * @bug 8211123 + * @summary Ensure that the Metaspace is updated in the log + * @requires vm.gc=="null" + * @key gc + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * + * @compile TestMetaSpaceLog.java + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main TestMetaSpaceLog + */ + +public class TestMetaSpaceLog { + private static Pattern metaSpaceRegexp; + + static { + // Do this once here. + metaSpaceRegexp = Pattern.compile(".*Metaspace: ([0-9]+).*->([0-9]+).*"); + } + + public static void main(String[] args) throws Exception { + testMetaSpaceUpdate("UseParallelGC"); + testMetaSpaceUpdate("UseG1GC"); + testMetaSpaceUpdate("UseConcMarkSweepGC"); + testMetaSpaceUpdate("UseSerialGC"); + } + + private static void verifyContainsMetaSpaceUpdate(OutputAnalyzer output) { + Predicate collectedMetaSpace = line -> check(line); + + // At least one metaspace line from GC should show GC being collected. + boolean foundCollectedMetaSpace = output.asLines().stream() + .filter(s -> s.contains("[gc,metaspace")) + .anyMatch(TestMetaSpaceLog::check); + Asserts.assertTrue(foundCollectedMetaSpace); + } + + private static boolean check(String line) { + Matcher m = metaSpaceRegexp.matcher(line); + Asserts.assertTrue(m.matches(), "Unexpected line for metaspace logging: " + line); + long before = Long.parseLong(m.group(1)); + long after = Long.parseLong(m.group(2)); + return before > after; + } + + private static void testMetaSpaceUpdate(String gcFlag) throws Exception { + // Propagate test.src for the jar file. + String testSrc= "-Dtest.src=" + System.getProperty("test.src", "."); + + System.err.println("Testing with GC Flag: " + gcFlag); + ProcessBuilder pb = + ProcessTools.createJavaProcessBuilder( + "-XX:+" + gcFlag, + "-Xlog:gc*", + "-Xbootclasspath/a:.", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xmx1000M", + "-Xms1000M", + testSrc, StressMetaSpace.class.getName()); + + OutputAnalyzer output = null; + try { + output = new OutputAnalyzer(pb.start()); + verifyContainsMetaSpaceUpdate(output); + } catch (Exception e) { + // For error diagnosis: print and throw. + e.printStackTrace(); + output.reportDiagnosticSummary(); + throw e; + } + } + + static class StressMetaSpace { + private static URL[] urls = new URL[1]; + + static { + try { + File jarFile = new File(System.getProperty("test.src") + "/testcases.jar"); + urls[0] = jarFile.toURI().toURL(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String args[]) { + WhiteBox wb = WhiteBox.getWhiteBox(); + for(int i = 0; i < 10000; i++) { + loadClass(wb); + } + wb.fullGC(); + } + + public static void loadClass(WhiteBox wb) { + try { + URLClassLoader ucl = new URLClassLoader(urls); + Class.forName("case00", false, ucl); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/test/hotspot/jtreg/gc/logging/testcases.jar b/test/hotspot/jtreg/gc/logging/testcases.jar new file mode 100644 index 0000000000000000000000000000000000000000..5996133fe1ed2ca30a11f587abd28de4d6536f77 GIT binary patch literal 18020 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 literal 0 HcmV?d00001