JMX(Java Management Extensions) 即 Java 管理扩展: 是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。以上为百度百科中的定义。

JMX基本架构

java controller service mapper 三层 java manager层_IP

从图中我们可以看到,JMX的结构一共分为三层,从下往上:

设备层(Instrumentation Level),也称为 工具层

定义了编写可由 JMX 管理的资源的规范。主要是MBean,MBean分为四种类型: 标准、动态、开放、模型。 通知模型:Notification、NotificationListener等类;  MBean元数据类:Attribute、Opreator等类

代理层(Agent Level)

Agent层构建在设备层之上,使用并管理设备层内部描述的组件。通常Agent由一个MBeanServer和多个系统服务组成。MBean Server则是启动与JVM内的基于各种协议的适配器.

分布服务层(Distributed Service Level)

也称为 Remote Management,面向用户的程序, 提供远程访问的入口。它定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述

JMX Agent与Distributed之间是通过协议链接的,这协议可能包含:HTTP、SNMP、RMI、IIOP等。Agent中有针对上面协议的各种适配器。可以解析通过相应协议传输过来的数据。 

      要使一个Java对象可管理,则必须创建相应的MBean对象,并通过这些MBean对象管理相应的Java对象。当拥有MBean类后,需要将其实例化并注册到MBeanServer上。

     JMX 也可以用来监控和管理Java虚拟机。

     JDK5.0以上版本均提供了JMX接口及实现代码。jdk的bin目录下也提供了可视化的客户端工具 JConsole及JVisualVM。我本机安装了JDK6的版本,进入bin目录下,双击jconsole.exe 启动JConsole:

          

java controller service mapper 三层 java manager层_Distributed_02

         由于我本机启动了MyEclipse2015,同时在MyEclipse2015中也启动了Tomcat,所以在本地进程中能够看到org.apache.catalina.startup.Bootstrap start的进程,选择该本地进程,点击 连接 后进入Java监视和管理控制台,可以看到MBean的Tab项

          

java controller service mapper 三层 java manager层_IP_03

      点击 MBean选项卡,可以看到监控到的Tomcat中的MBeanInfo,关于Tomcat中的MBean的详情,计划在后续的Tomcat源码学习系列中说明,这里只是个初步展示。

      

java controller service mapper 三层 java manager层_Java_04

      

       进入bin目录下,双击jvisualvm.exe, 进入Java VisualVM,可以看到本地的Tomcat及MyEclipse进程:

        

java controller service mapper 三层 java manager层_IP_05


            双击Tomcat进程,可以看到对Tomcat的监控情况:

       

java controller service mapper 三层 java manager层_Java_06

 

      

        建立远程Tomcat监控:
        需要配置远程主机(IP: 10.176.8.222)上tomcat的bin目录下的 catalina.bat(windows操作系统)中,set JAVA_OPTS 后增加以下:
       -Dcom.sun.management.jmxremote.port=9099 
       -Dcom.sun.management.jmxremote.ssl=false
       -Dcom.sun.management.jmxremote.authenticate=false
       -Djava.rmi.server.hostname=10.176.8.222

        保证 远程主机上的Tomcat正常启动。

         在本机的Java VisualVM程序中配置:   添加远程主机,输入远程主机IP

        

java controller service mapper 三层 java manager层_Java_07


                  添加 JMX 连接:

        

java controller service mapper 三层 java manager层_IP_08


添加成功后,可以远程监控Tomcat的使用情况了:

        

java controller service mapper 三层 java manager层_Java_09


         


          过程中遇到很奇怪的问题: 10.176.8.222 远程主机是一台开发机器,如果是通过MyEclipse2015开发工具启动Tomcat 的, 本机通过Java VisualVM无法建立JMX连接;

始终在报错:

           

java controller service mapper 三层 java manager层_IP_10

 在远程主机上不通过MyEclipse启动,直接在Tomcat的bin目录下启动后,终于可以正常建立 JMX连接; 不知道是什么原因;
      建立连接 远程linux服务器上的Tomcat,网上有,如: