mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
handle MemoryPoolMXBean.getUsage() exception. #2120
This commit is contained in:
@@ -49,9 +49,11 @@ public class MemoryCommand extends AnnotatedCommand {
|
||||
heapMemEntries.add(createMemoryEntryVO(TYPE_HEAP, TYPE_HEAP, heapMemoryUsage));
|
||||
for (MemoryPoolMXBean poolMXBean : memoryPoolMXBeans) {
|
||||
if (MemoryType.HEAP.equals(poolMXBean.getType())) {
|
||||
MemoryUsage usage = poolMXBean.getUsage();
|
||||
String poolName = StringUtils.beautifyName(poolMXBean.getName());
|
||||
heapMemEntries.add(createMemoryEntryVO(TYPE_HEAP, poolName, usage));
|
||||
MemoryUsage usage = getUsage(poolMXBean);
|
||||
if (usage != null) {
|
||||
String poolName = StringUtils.beautifyName(poolMXBean.getName());
|
||||
heapMemEntries.add(createMemoryEntryVO(TYPE_HEAP, poolName, usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
memoryInfoMap.put(TYPE_HEAP, heapMemEntries);
|
||||
@@ -62,9 +64,11 @@ public class MemoryCommand extends AnnotatedCommand {
|
||||
nonheapMemEntries.add(createMemoryEntryVO(TYPE_NON_HEAP, TYPE_NON_HEAP, nonHeapMemoryUsage));
|
||||
for (MemoryPoolMXBean poolMXBean : memoryPoolMXBeans) {
|
||||
if (MemoryType.NON_HEAP.equals(poolMXBean.getType())) {
|
||||
MemoryUsage usage = poolMXBean.getUsage();
|
||||
String poolName = StringUtils.beautifyName(poolMXBean.getName());
|
||||
nonheapMemEntries.add(createMemoryEntryVO(TYPE_NON_HEAP, poolName, usage));
|
||||
MemoryUsage usage = getUsage(poolMXBean);
|
||||
if (usage != null) {
|
||||
String poolName = StringUtils.beautifyName(poolMXBean.getName());
|
||||
nonheapMemEntries.add(createMemoryEntryVO(TYPE_NON_HEAP, poolName, usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
memoryInfoMap.put(TYPE_NON_HEAP, nonheapMemEntries);
|
||||
@@ -73,6 +77,16 @@ public class MemoryCommand extends AnnotatedCommand {
|
||||
return memoryInfoMap;
|
||||
}
|
||||
|
||||
private static MemoryUsage getUsage(MemoryPoolMXBean memoryPoolMXBean) {
|
||||
try {
|
||||
return memoryPoolMXBean.getUsage();
|
||||
} catch (InternalError e) {
|
||||
// Defensive for potential InternalError with some specific JVM options. Based on its Javadoc,
|
||||
// MemoryPoolMXBean.getUsage() should return null, not throwing InternalError, so it seems to be a JVM bug.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void addBufferPoolMemoryInfo(Map<String, List<MemoryEntryVO>> memoryInfoMap) {
|
||||
try {
|
||||
List<MemoryEntryVO> bufferPoolMemEntries = new ArrayList<MemoryEntryVO>();
|
||||
|
||||
Reference in New Issue
Block a user