JVM 平台提供 Mbeans

JVM 平台提供 **Mbeans **说明

在 Java 2 平台 5.0 以上版本,有一组 API 可以让 Java 应用程序和允许的工具监视和管理 Java 虚拟机( JVM )和虚拟机所在的本机操作系统。该组 API 在 java.lang.management 。可以通过这些 API 可以监控 local 端 JVM ,同时也可以监控远端 JVM

Java 平台提供了如下一些接口用于管理 JVM 平台

ClassLoadingMXBean Java 虚拟机的类加载系统。

CompilationMXBean Java 虚拟机的编译系统。

MemoryMXBean Java 虚拟机的内存系统。

ThreadMXBean Java 虚拟机的线程系统。

RuntimeMXBean Java 虚拟机的运行时系统。

OperatingSystemMXBean Java 虚拟机在其上运行的操作系统。

GarbageCollectorMXBean Java 虚拟机中的垃圾回收器。

MemoryManagerMXBean Java 虚拟机中的内存管理器。

MemoryPoolMXBean Java 虚拟机中的内存池。

这些 Bean 我们从 ManagementFactory 类中定义。

访问 Mean 的方式有两种

  1. 直接访问 MXBean 接口
  • 通过静态工厂方法获取 MXBean 实例,从本地访问正在运行的虚拟机的 MXBean 接口。

  • 构造 MXBean 代理实例,通过调用 ManagementFactory.newPlatformMXBeanProxy 将方法调用转发到给定的 MBeanServe 。代理通常构造为远程访问另一个正在运行的虚拟机的 MXBean 。

  1. 通过 MBeanServer 接口间接访问(暂时还没来的及研究)

例:

** 直接调用同一 ****Java **** 虚拟机内的 ****MXBean **中的方法。

1.  import java.lang.management.ManagementFactory;  
2.  import java.lang.management.OperatingSystemMXBean;  
3.  import java.lang.management.ThreadMXBean;  
4.  public class JmxLocal {  
5.      public static void main(String[] args) {      
6.          OperatingSystemMXBean osbean = ManagementFactory  
7.                  .getOperatingSystemMXBean();  
8.          System.out.println(osbean.getArch());//操作系统体系结构  
9.          System.out.println(osbean.getName());//操作系统名字  
10.          System.out.println(osbean.getAvailableProcessors());//处理器数目  
11.          System.out.println(osbean.getVersion());//操作系统版本      
12.          ThreadMXBean threadBean=ManagementFactory.getThreadMXBean();  
13.          System.out.println(threadBean.getThreadCount());//总线程数    
14.      }  
15.  }

使用 MXBean 代理。访问远程 Mbean

1.  import java.lang.management.ManagementFactory;  
2.  import java.lang.management.ThreadMXBean;  
3.  import javax.management.MBeanServerConnection;  
4.  import javax.management.remote.JMXConnector;  
5.  import javax.management.remote.JMXConnectorFactory;  
6.  import javax.management.remote.JMXServiceURL;  
7.  public class JmxRemote {  
8.      public static void main(String[] args) {  
9.          try {  
10.  // connect to a separate VM's MBeanServer, using the JMX RMI functionality  
11.  JMXServiceURL address = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");  
12.              JMXConnector connector = JMXConnectorFactory.connect(address);  
13.              MBeanServerConnection mbs = connector.getMBeanServerConnection();  
14.              ThreadMXBean threadBean = ManagementFactory.newPlatformMXBeanProxy  
15.              (mbs, ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);  
16.              System.out.println(threadBean.getThreadCount());//线程数量        
17.          } catch(Exception e){  
18.              e.printStackTrace();  
19.          }  
20.      }  
21.  }

如果要远程访问,被访问 Mbean 服务器首选需要 ** 命令行选项启动远程虚拟机,这些选项设置虚拟机的相关 **JMX 代理侦听请求的端口,以及起作用的安全级别

如下:

-Dcom.sun.management.jmxremote.port=9999 – 指定端口

-Dcom.sun.management.jmxremote.authenticate=false – 指定是否需要密码验证

-Dcom.sun.management.jmxremote.ssl=false – 指定是否使用 SSL 通讯

例:

1.  public class Test {  
2.      public static void main(String[] args) {  
3.          Thread thread=new Thread();  
4.          thread.run();  
5.          try {  
6.              thread.sleep(100000);  
7.          } catch (InterruptedException e) {  
8.              e.printStackTrace();  
9.          }  
10.          System.out.println("Success");  
          12.      }  
13.  }
  
    展开阅读全文