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 <[email protected]>
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