diff --git a/.circleci/config.yml b/.circleci/config.yml index 1d57425272..063c060969 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -66,6 +66,7 @@ jobs: - gradlew-build - run: ./gradlew shenandoahTest - run: ./gradlew zgcTest + - run: ./gradlew zgcGenerationalTest build-jdk11: executor: circle-jdk11-executor diff --git a/micrometer-core/build.gradle b/micrometer-core/build.gradle index 7f307d8814..214159213f 100644 --- a/micrometer-core/build.gradle +++ b/micrometer-core/build.gradle @@ -225,6 +225,17 @@ task zgcTest(type: Test) { jvmArgs '-XX:+UseZGC' } +task zgcGenerationalTest(type: Test) { + // set heap size for the test JVM(s) + maxHeapSize = "1500m" + + useJUnitPlatform { + includeTags 'gc' + } + + jvmArgs '-XX:+UseZGC', '-XX:+ZGenerational' +} + task openj9BalancedTest(type: Test) { // set heap size for the test JVM(s) maxHeapSize = "1500m" diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmGcMetrics.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmGcMetrics.java index 8ef382752b..854bc580d1 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmGcMetrics.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmGcMetrics.java @@ -348,6 +348,8 @@ enum GcGenerationAge { put("GPGC Old Cycles", OLD); // new naming put("GPGC New Pauses", YOUNG); // new naming put("GPGC Old Pauses", OLD); // new naming + put("ZGC Major Cycles", OLD); // do not include 'ZGC Major Pauses'; see + // gh-2872 } }; diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmMemory.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmMemory.java index a0c2567f2a..bcff3e4117 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmMemory.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/JvmMemory.java @@ -42,7 +42,9 @@ static boolean isConcurrentPhase(String cause, String name) { } static boolean isAllocationPool(String name) { - return name != null && (name.endsWith("Eden Space") || "Shenandoah".equals(name) || "ZHeap".equals(name) + return name != null && (name.endsWith("Eden Space") || "Shenandoah".equals(name) || "ZHeap".equals(name) // ZGC + // non-generational + || "ZGC Young Generation".equals(name) // generational ZGC || name.endsWith("New Gen") // Zing GPGC || name.endsWith("nursery-allocate") || name.endsWith("-eden") // "balanced-eden" || "JavaHeap".equals(name) // metronome @@ -51,9 +53,10 @@ static boolean isAllocationPool(String name) { static boolean isLongLivedPool(String name) { return name != null && (name.endsWith("Old Gen") || name.endsWith("Tenured Gen") || "Shenandoah".equals(name) - || "ZHeap".equals(name) || name.endsWith("balanced-old") || name.contains("tenured") // "tenured", - // "tenured-SOA", - // "tenured-LOA" + || "ZHeap".equals(name) // ZGC non-generational + || "ZGC Old Generation".equals(name) // generational ZGC + || name.endsWith("balanced-old") // + || name.contains("tenured") // "tenured", "tenured-SOA", "tenured-LOA" || "JavaHeap".equals(name) // metronome ); }