代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

Java虚拟机管理JMX的特点

  •  0
  • GuruKulki  · 技术社区  · 15 年前

    在研究JMX时,我发现它的一个重要特性是它可以管理一个JVM本身,我不知道它在什么意义上可以管理JVM。有人能用一些例子来阐述这一点吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Amir Afghani    15 年前

    你可以很容易地看到这个。

    • 步骤1:下载 JConsole
    • 步骤2:启动Java进程(Java 5或更高版本)
    • 步骤3:用JConnect连接到Java进程
    • 步骤4:查看用于触发堆转储事件、垃圾收集请求、线程信息、加载的类等的MBean

    特别有趣的是,您可以编写代码来访问正在运行的Java程序的MPEN:

    有三种不同的方法 访问管理界面。呼叫 MXBean中的方法直接 在同一个Java虚拟机中。

    RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
    
       // Get the standard attribute "VmVendor"    String vendor = mxbean.getVmVendor();
    

    进行MBeanServer连接 连接到平台MBeanServer 一个正在运行的虚拟机。

    MBeanServerConnection mbs;
    
       // Connect to a running JVM (or itself) and get MBeanServerConnection  // that has the JVM MXBeans registered in it    ...
    
       try {
           // Assuming the RuntimeMXBean has been registered in mbs
           ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
    
           // Get standard attribute "VmVendor"
           String vendor = (String) mbs.getAttribute(oname, "VmVendor");   } catch (....) {
           // Catch the exceptions thrown by ObjectName constructor
           // and MBeanServer.getAttribute method
           ...    }
    

    使用MXBean代理。

    MBeanServerConnection mbs;
    
       // Connect to a running JVM (or itself) and get MBeanServerConnection  // that has the JVM MBeans registered in it    ...
    
       // Get a MBean proxy for RuntimeMXBean interface    RuntimeMXBean proxy = 
           ManagementFactory.newPlatformMXBeanProxy(mbs,
                                                    ManagementFactory.RUNTIME_MXBEAN_NAME,
                                                    RuntimeMXBean.class);    // Get standard attribute "VmVendor"     String vendor = proxy.getVmVendor();
    

    也见 The Java Language Management API