Arthas 查看 Mbean 的信息

系列

  • 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 queryObjectNames() {
        MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
        Set objectNames = new HashSet();
        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 objectNames = queryObjectNames();
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        try {
            MBeanModel mbeanModel = new MBeanModel();
            Map mbeanMetaData = new LinkedHashMap();
            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

你可能感兴趣的:(Arthas 查看 Mbean 的信息)