diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java index 89b7829cfb0e9..73bf26d7714fa 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java @@ -181,16 +181,21 @@ private void getGcUsage(MetricsRecordBuilder rb) { long count = 0; long timeMillis = 0; for (GarbageCollectorMXBean gcBean : gcBeans) { - if (gcBean.getName() != null) { - String name = gcBean.getName(); + String gcBeanName = gcBean.getName(); + if (gcBeanName == null || gcBeanName.startsWith("ZGC") && gcBeanName.endsWith("Cycles")) { // JDK-8265136 Skip concurrent phase - if (name.startsWith("ZGC") && name.endsWith("Cycles")) { - continue; - } + continue; } long c = gcBean.getCollectionCount(); long t = gcBean.getCollectionTime(); - MetricsInfo[] gcInfo = getGcInfo(gcBean.getName()); + if (gcBeanName.startsWith("ZGC")) { + if (gcBeanName.contains("Minor")) { + rb.addCounter(MinorGcCount, c).addCounter(MinorGcTimeMillis, t); + } else { + rb.addCounter(MajorGcCount, c).addCounter(MajorGcTimeMillis, t); + } + } + MetricsInfo[] gcInfo = getGcInfo(gcBeanName); rb.addCounter(gcInfo[0], c).addCounter(gcInfo[1], t); count += c; timeMillis += t; diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetricsInfo.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetricsInfo.java index 74f670bb20c14..bd2dd6d0ea897 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetricsInfo.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetricsInfo.java @@ -39,6 +39,10 @@ public enum JvmMetricsInfo implements MetricsInfo { MemMaxM("Max memory size in MB"), GcCount("Total GC count"), GcTimeMillis("Total GC time in milliseconds"), + MinorGcCount("Minor GC Count"), + MajorGcCount("Major GC Count"), + MinorGcTimeMillis("Minor GC time in milliseconds"), + MajorGcTimeMillis("Major GC time in milliseconds"), ThreadsNew("Number of new threads"), ThreadsRunnable("Number of runnable threads"), ThreadsBlocked("Number of blocked threads"),