This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


The following commit(s) were added to refs/heads/main by this push:
     new c15ac3071e Support collect ZGC memory pool metrics (#622)
c15ac3071e is described below

commit c15ac3071e42f72a528664631248b9e75d83bbaf
Author: Wayne Chu <wayne...@waynechu.cn>
AuthorDate: Fri Oct 20 12:38:18 2023 +0800

    Support collect ZGC memory pool metrics (#622)
---
 CHANGES.md                                         |  2 +
 apm-protocol/apm-network/src/main/proto            |  2 +-
 .../core/jvm/memorypool/MemoryPoolProvider.java    |  3 +
 .../core/jvm/memorypool/ZGCCollectorModule.java    | 70 ++++++++++++++++++++++
 4 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index 16ed45919f..eab5a4afde 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -15,6 +15,8 @@ Release Notes.
 * Support report MongoDB instance info in Mongodb 4.x plugin.
 * To compatible upper and lower case Oracle TNS url parse.
 * Fix config length limitation.
+* Support collecting ZGC memory pool metrics. Require OAP 9.7.0 to support 
these new metrics.
+
 
 #### Documentation
 
diff --git a/apm-protocol/apm-network/src/main/proto 
b/apm-protocol/apm-network/src/main/proto
index f9066463de..d4da569991 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit f9066463deb7f9d1fbe8110eab3524694b0db298
+Subproject commit d4da5699915ee52288f8ff1c954decf6363485bc
diff --git 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/MemoryPoolProvider.java
 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/MemoryPoolProvider.java
index 8633c1213d..901c9d4a3f 100644
--- 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/MemoryPoolProvider.java
+++ 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/MemoryPoolProvider.java
@@ -61,6 +61,9 @@ public enum MemoryPoolProvider {
         } else if (name.equals("Survivor Space")) {
             // Serial collector ( -XX:+UseSerialGC )
             return new SerialCollectorModule(beans);
+        } else if (name.equals("ZHeap")) {
+            // ZGC collector ( -XX:+UseZGC )
+            return new ZGCCollectorModule(beans);
         } else {
             // Unknown
             return null;
diff --git 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/ZGCCollectorModule.java
 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/ZGCCollectorModule.java
new file mode 100644
index 0000000000..7cf87bcf17
--- /dev/null
+++ 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/memorypool/ZGCCollectorModule.java
@@ -0,0 +1,70 @@
+/*
+ * 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.memorypool;
+
+import org.apache.skywalking.apm.network.language.agent.v3.MemoryPool;
+import org.apache.skywalking.apm.network.language.agent.v3.PoolType;
+
+import java.lang.management.MemoryPoolMXBean;
+import java.lang.management.MemoryUsage;
+import java.util.LinkedList;
+import java.util.List;
+
+public class ZGCCollectorModule implements MemoryPoolMetricsAccessor {
+
+    private final List<MemoryPoolMXBean> beans;
+
+    public ZGCCollectorModule(List<MemoryPoolMXBean> beans) {
+        this.beans = beans;
+    }
+
+    @Override
+    public List<MemoryPool> getMemoryPoolMetricsList() {
+        List<MemoryPool> poolList = new LinkedList<>();
+        for (MemoryPoolMXBean bean : beans) {
+            String name = bean.getName();
+            PoolType type;
+            if (name.equals("ZHeap")) {
+                type = PoolType.ZHEAP_USAGE;
+            } else if (name.equals("Metaspace")) {
+                type = PoolType.METASPACE_USAGE;
+            } else if (name.equals("Compressed Class Space")) {
+                type = PoolType.COMPRESSED_CLASS_SPACE_USAGE;
+            } else if (name.equals("CodeHeap 'non-nmethods'")) {
+                type = PoolType.CODEHEAP_NON_NMETHODS_USAGE;
+            } else if (name.equals("CodeHeap 'profiled nmethods'")) {
+                type = PoolType.CODEHEAP_PROFILED_NMETHODS_USAGE;
+            } else if (name.equals("CodeHeap 'non-profiled nmethods'")) {
+                type = PoolType.CODEHEAP_NON_PROFILED_NMETHODS_USAGE;
+            } else {
+                continue;
+            }
+
+            MemoryUsage usage = bean.getUsage();
+            poolList.add(MemoryPool.newBuilder()
+                    .setType(type)
+                    .setInit(usage.getInit())
+                    .setMax(usage.getMax())
+                    .setCommitted(usage.getCommitted())
+                    .setUsed(usage.getUsed())
+                    .build());
+        }
+        return poolList;
+    }
+}
\ No newline at end of file

Reply via email to