Arthas 查看 Mbean 的信息
2021-05-23 本文已影响0人
晴天哥_王志
系列
- Arthas入门篇
- Arthas功能介绍
- Arthas 启动过程分析
- Arthas使用Idea调试
- Arthas Command处理流程
- Arthas类查找和反编译原理
- Arthas内存动态编译原理
- Arthas动态重新加载类
- Arthas导出加载类
- Arthas classloader类加载器
- Arthas 查看当前JVM信息
- Arthas thread查看线程信息
- Arthas 获取系统环境变量
开篇
- arthas提供Mbean命令查看或监控 Mbean 的属性信息。
原理介绍
- MBeanServer是一个包含所有注册MBean的仓库.它是JMX代理层的核心.JMX1.0规范提供一个接口叫 javax.management.MBeanServer. 所有管理的在MBean操作通过MBeanServer执行.使用MBeanServer实例,你能够管理所有MBean.每一个MBean具有一个唯一标志,叫ObjectName.
源码分析
private Set<ObjectName> queryObjectNames() {
MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = new HashSet<ObjectName>();
try {
if (StringUtils.isEmpty(name)) {
name = "*:*";
}
objectNames = platformMBeanServer.queryNames(new ObjectName(name), null);
} catch (MalformedObjectNameException e) {
logger.warn("queryObjectNames error", e);
}
return objectNames;
}
private void listMetaData(CommandProcess process) {
Set<ObjectName> objectNames = queryObjectNames();
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
try {
MBeanModel mbeanModel = new MBeanModel();
Map<String, MBeanInfo> mbeanMetaData = new LinkedHashMap<String, MBeanInfo>();
mbeanModel.setMbeanMetadata(mbeanMetaData);
for (ObjectName objectName : objectNames) {
MBeanInfo mBeanInfo = mBeanServer.getMBeanInfo(objectName);
mbeanMetaData.put(objectName.toString(), mBeanInfo);
}
process.appendResult(mbeanModel);
process.end();
} catch (Throwable e) {
logger.warn("listMetaData error", e);
process.end(1, "list mbean metadata error");
}
}
- 通过 ManagementFactory.getPlatformMBeanServer()获取MBeanServer。
- 通过MBeanServer的queryNames获取ObjectName对象。
- 通过MBeanInfo mBeanInfo = mBeanServer.getMBeanInfo(objectName)获取MBeanInfo