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