From 03e3eb11d589645f868d40dd15db74578386f564 Mon Sep 17 00:00:00 2001 From: "Xin,Zhang" Date: Thu, 3 May 2018 15:17:22 +0800 Subject: [PATCH] Fix the GC value is incorrect (#1147) --- .../apm/agent/core/jvm/gc/GCModule.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) 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 2789be9cd..7f88a07f1 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 @@ -30,8 +30,10 @@ import org.apache.skywalking.apm.network.proto.GCPhrase; public abstract class GCModule implements GCMetricAccessor { private List beans; - private long lastGCCount = 0; - private long lastCollectionTime = 0; + private long lastOGCCount = 0; + private long lastYGCCount = 0; + private long lastOGCCollectionTime = 0; + private long lastYGCCollectionTime = 0; public GCModule(List beans) { this.beans = beans; @@ -43,22 +45,30 @@ public abstract class GCModule implements GCMetricAccessor { for (GarbageCollectorMXBean bean : beans) { String name = bean.getName(); GCPhrase phrase; + long gcCount = 0; + long gcTime = 0; if (name.equals(getNewGCName())) { phrase = GCPhrase.NEW; + long collectionCount = bean.getCollectionCount(); + gcCount = collectionCount - lastYGCCount; + lastYGCCount = collectionCount; + + long time = bean.getCollectionTime(); + gcTime = time - lastYGCCollectionTime; + lastYGCCollectionTime = time; } else if (name.equals(getOldGCName())) { phrase = GCPhrase.OLD; + long collectionCount = bean.getCollectionCount(); + gcCount = collectionCount - lastOGCCount; + lastOGCCount = collectionCount; + + long time = bean.getCollectionTime(); + gcTime = time - lastOGCCollectionTime; + lastOGCCollectionTime = time; } else { continue; } - long collectionCount = bean.getCollectionCount(); - long gcCount = collectionCount - lastGCCount; - lastGCCount = collectionCount; - - long time = bean.getCollectionTime(); - long gcTime = time - lastCollectionTime; - lastCollectionTime = time; - gcList.add( GC.newBuilder().setPhrase(phrase) .setCount(gcCount) -- GitLab