Support collect ZGC memory pool metrics (#622)

This commit is contained in:
Wayne Chu 2023-10-20 12:38:18 +08:00 committed by GitHub
parent 017bc20908
commit c15ac3071e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 1 deletions

View File

@ -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

@ -1 +1 @@
Subproject commit f9066463deb7f9d1fbe8110eab3524694b0db298
Subproject commit d4da5699915ee52288f8ff1c954decf6363485bc

View File

@ -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;

View File

@ -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;
}
}