From 97337063f8035f729c3262eff25fd957a108433e Mon Sep 17 00:00:00 2001 From: xu1009 <2933250475@qq.com> Date: Thu, 1 Jun 2023 13:06:15 +0800 Subject: [PATCH] Support jdk17 zgc (#541) --- CHANGES.md | 1 + .../apm/agent/core/jvm/gc/CMSGCModule.java | 4 -- .../apm/agent/core/jvm/gc/G1GCModule.java | 4 -- .../apm/agent/core/jvm/gc/GCModule.java | 17 ++----- .../agent/core/jvm/gc/ParallelGCModule.java | 5 -- .../apm/agent/core/jvm/gc/SerialGCModule.java | 4 -- .../apm/agent/core/jvm/gc/ZGCModule.java | 49 ++++++++++++++----- 7 files changed, 41 insertions(+), 43 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5a18dc55a..a641b1cb6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ Release Notes. 8.17.0 ------------------ +* Support Jdk17 ZGC metric collect #### Documentation diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/CMSGCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/CMSGCModule.java index 521bf37e9..d1f6f058d 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/CMSGCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/CMSGCModule.java @@ -36,8 +36,4 @@ public class CMSGCModule extends GCModule { return "ParNew"; } - @Override - protected String getNormalGCName() { - return null; - } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/G1GCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/G1GCModule.java index c8b8666f3..733a031bb 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/G1GCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/G1GCModule.java @@ -36,8 +36,4 @@ public class G1GCModule extends GCModule { return "G1 Young Generation"; } - @Override - protected String getNormalGCName() { - return null; - } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCModule.java index 50878f7c9..73d54acfc 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCModule.java @@ -18,11 +18,12 @@ package org.apache.skywalking.apm.agent.core.jvm.gc; +import org.apache.skywalking.apm.network.language.agent.v3.GC; +import org.apache.skywalking.apm.network.language.agent.v3.GCPhase; + import java.lang.management.GarbageCollectorMXBean; import java.util.LinkedList; import java.util.List; -import org.apache.skywalking.apm.network.language.agent.v3.GC; -import org.apache.skywalking.apm.network.language.agent.v3.GCPhase; public abstract class GCModule implements GCMetricAccessor { private List beans; @@ -31,8 +32,6 @@ public abstract class GCModule implements GCMetricAccessor { private long lastYGCCount = 0; private long lastOGCCollectionTime = 0; private long lastYGCCollectionTime = 0; - private long lastNormalGCCount = 0; - private long lastNormalGCTime = 0; public GCModule(List beans) { this.beans = beans; @@ -64,15 +63,6 @@ public abstract class GCModule implements GCMetricAccessor { long time = bean.getCollectionTime(); gcTime = time - lastOGCCollectionTime; lastOGCCollectionTime = time; - } else if (name.equals(getNormalGCName())) { - phase = GCPhase.NORMAL; - long collectionCount = bean.getCollectionCount(); - gcCount = collectionCount - lastNormalGCCount; - lastNormalGCCount = collectionCount; - - long time = bean.getCollectionTime(); - gcTime = time - lastNormalGCTime; - lastNormalGCTime = time; } else { continue; } @@ -87,5 +77,4 @@ public abstract class GCModule implements GCMetricAccessor { protected abstract String getNewGCName(); - protected abstract String getNormalGCName(); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ParallelGCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ParallelGCModule.java index 60e532562..1773756e3 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ParallelGCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ParallelGCModule.java @@ -36,9 +36,4 @@ public class ParallelGCModule extends GCModule { return "PS Scavenge"; } - @Override - protected String getNormalGCName() { - return null; - } - } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/SerialGCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/SerialGCModule.java index 3279440a7..7b5a5425e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/SerialGCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/SerialGCModule.java @@ -36,8 +36,4 @@ public class SerialGCModule extends GCModule { return "Copy"; } - @Override - protected String getNormalGCName() { - return null; - } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ZGCModule.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ZGCModule.java index 87f9f6537..4c123fa45 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ZGCModule.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ZGCModule.java @@ -18,27 +18,52 @@ package org.apache.skywalking.apm.agent.core.jvm.gc; +import org.apache.skywalking.apm.network.language.agent.v3.GC; +import org.apache.skywalking.apm.network.language.agent.v3.GCPhase; + import java.lang.management.GarbageCollectorMXBean; +import java.util.LinkedList; import java.util.List; -public class ZGCModule extends GCModule { +public class ZGCModule implements GCMetricAccessor { + private List beans; + + private long lastNormalGCCount = 0; + private long lastNormalGCTime = 0; public ZGCModule(List beans) { - super(beans); + this.beans = beans; } @Override - protected String getOldGCName() { - return null; - } + public List getGCList() { + List gcList = new LinkedList(); + for (GarbageCollectorMXBean bean : beans) { + String name = bean.getName(); + long gcCount = 0; + long gcTime = 0; + if (name.equals("ZGC")) { + long collectionCount = bean.getCollectionCount(); + gcCount = collectionCount - lastNormalGCCount; + lastNormalGCCount = collectionCount; - @Override - protected String getNewGCName() { - return null; - } + long time = bean.getCollectionTime(); + gcTime = time - lastNormalGCTime; + lastNormalGCTime = time; + } else if (name.equals("ZGC Cycles")) { + long collectionCount = bean.getCollectionCount(); + gcCount = collectionCount - lastNormalGCCount; + lastNormalGCCount = collectionCount; + } else if (name.equals(" ZGC Pauses")) { + long time = bean.getCollectionTime(); + gcTime = time - lastNormalGCTime; + lastNormalGCTime = time; + } else { + continue; + } + gcList.add(GC.newBuilder().setPhase(GCPhase.NORMAL).setCount(gcCount).setTime(gcTime).build()); + } - @Override - protected String getNormalGCName() { - return "ZGC"; + return gcList; } }