diff --git a/CHANGES.md b/CHANGES.md index 25620b7c7..aec786051 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,7 @@ Release Notes. * Fix the bug that httpasyncclient-4.x-plugin puts the dirty tracing context in the connection context * Compatible with the versions after dubbo-2.7.14 * Follow protocol grammar fix `GCPhrase -> GCPhase`. +* Support ZGC GC time and count metric collect. (Require 9.0.0 OAP) #### 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 ac0a7ccb2..521bf37e9 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 @@ -35,4 +35,9 @@ public class CMSGCModule extends GCModule { protected String getNewGCName() { 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 d8226a744..c8b8666f3 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 @@ -35,4 +35,9 @@ public class G1GCModule extends GCModule { protected String getNewGCName() { 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 f4547c4fa..50878f7c9 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 @@ -31,6 +31,8 @@ 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; @@ -62,6 +64,15 @@ 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; } @@ -75,4 +86,6 @@ public abstract class GCModule implements GCMetricAccessor { protected abstract String getOldGCName(); 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/GCProvider.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCProvider.java index 1b3391f3b..48b8bbe45 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCProvider.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/GCProvider.java @@ -62,6 +62,9 @@ public enum GCProvider { } else if (name.equals("MarkSweepCompact")) { // Serial collector ( -XX:+UseSerialGC ) return new SerialGCModule(beans); + } else if (name.indexOf("ZGC") > -1) { + // Serial collector ( -XX:+UseZGC ) + return new ZGCModule(beans); } else { // Unknown return null; 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 1773756e3..60e532562 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,4 +36,9 @@ 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 b1c866767..3279440a7 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 @@ -35,4 +35,9 @@ public class SerialGCModule extends GCModule { protected String getNewGCName() { 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 new file mode 100644 index 000000000..87f9f6537 --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/gc/ZGCModule.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.agent.core.jvm.gc; + +import java.lang.management.GarbageCollectorMXBean; +import java.util.List; + +public class ZGCModule extends GCModule { + + public ZGCModule(List beans) { + super(beans); + } + + @Override + protected String getOldGCName() { + return null; + } + + @Override + protected String getNewGCName() { + return null; + } + + @Override + protected String getNormalGCName() { + return "ZGC"; + } +}