JMX 简介
JMX(Java Management Extensions)是Java平台的一个标准管理框架,自Java 1.5版本起成为Java 平台标准版 (Java SE 平台) 的标准组成部分。JMX 技术提供了一种简单、标准的方法来管理资源(例如应用程序、设备和服务)。由于 JMX 技术是动态的,因此您可以在创建、安装和实施资源时使用它来监视和管理资源。您还可以使用 JMX 技术来监视和管理 Java 虚拟机 (Java VM)。JMX 规范定义了 Java 编程语言中用于应用程序和网络管理和监控的架构、设计模式、API 和服务。
使用 JMX 技术,给定资源由一个或多个 Java 对象(称为托管 Bean或MBean)进行检测。这些 MBean 在核心管理对象服务器(称为MBean 服务器)中注册。MBean 服务器充当管理代理,可以在大多数已启用 Java 编程语言的设备上运行。规范定义了 JMX 代理,您可以使用它来管理已正确配置的任何资源。JMX 代理由一个 MBean 服务器(其中注册了 MBean)和一组用于处理 MBean 的服务组成。这样,JMX 代理就可以直接控制资源并使其可供远程管理应用程序使用。
为什么要使用 JMX 技术?
JMX 技术为开发人员提供了一种灵活的方法来处理基于 Java 技术的应用程序(Java 应用程序)、创建智能代理、实现分布式管理中间件和管理器,并将这些解决方案顺利地集成到现有的管理和监控系统中。
- JMX 技术降低了Java 应用程序的管理成本:基于 JMX 技术的代理(JMX 代理)可以在大多数支持 Java 技术的设备上运行。因此,Java 应用程序可以变得易于管理,而对其设计几乎没有影响。Java 应用程序只需嵌入托管对象服务器,并将其部分功能作为在对象服务器中注册的一个或多个托管 bean(MBean)提供即可。这就是从管理基础架构中获益所需的全部内容。
- JMX技术提供了一种管理Java应用程序、系统和网络的标准方法:例如,Java Platform, Enterprise Edition (Java EE) 5应用服务器符合JMX架构,因此可以使用JMX技术进行管理。
- JMX 技术可用于对 Java VM 进行开箱即用的管理:Java虚拟机 (Java VM) 使用 JMX 技术进行高度仪表化。您可以启动 JMX 代理来访问内置的 Java VM 仪表化,从而远程监控和管理 Java VM。
- JMX 技术提供了一种可扩展的动态管理架构:每个 JMX 代理服务都是一个独立的模块,可以根据需求插入到管理代理中。这种基于组件的方法意味着 JMX 解决方案可以从小型设备扩展到大型电信交换机甚至更远。JMX 规范提供了一组核心代理服务。可以在管理基础架构中开发和动态加载、卸载或更新其他服务。
- JMX 技术利用了现有的标准 Java 技术:在需要时,JMX 规范会引用现有的 Java 规范,例如 Java 命名和目录接口 (JNDI) API。
- 基于 JMX 技术的应用程序(JMX 应用程序)可以通过 NetBeans IDE 模块创建:您可以从 NetBeans 更新中心(在 NetBeans 界面中选择“工具”->“更新中心”)获取一个模块,该模块允许您使用 NetBeans IDE 创建 JMX 应用程序。这降低了开发 JMX 应用程序的成本。
- JMX 技术与现有管理解决方案和新兴技术相集成:JMXAPI 是任何管理系统供应商都可以实现的开放接口。JMX 解决方案可以使用查找和发现服务和协议,例如 Jini 网络技术和服务定位协议 (SLP)。
JMX的使用
- 创建MBeanServer:MBeanServer相当于管理MBean的容器。创建MBeanServer有两种方式:一是获取JVM中默认启动的MBeanServer,二是自己创建。
- 创建ObjectName:用于标识唯一的资源MBean,格式为:“域名:name=MBean名称”。
- 绑定MBean与对应的ObjectName并注册到MBeanServer:至此即可通过JConsole管理本地的MBean的相关信息。同时,也可以提供其他的连接方式,如rmi连接方式。
- 注册监听端口号。
- 创建JMXServiceURL:格式为:service:jmx:rmi://localhost:0/jndi/rmi://localhost:1099/jmxrmi(完整版)JMXServiceURL格式说明。
- 通过JMX来管理和监控Java应用程序。例如,可以使用JConsole通过JMX查看Java程序的运行信息。这些信息包括内存情况、线程情况、类加载情况等。
JMX 架构
JMX 技术架构
JMX 技术架构分为三部分:Instrumentation,Agent,Remote Management。
Instrumentation
要使用 JMX 技术管理资源,您必须首先使用 Java 编程语言对资源进行检测。您可以使用称为MBean的 Java 对象来实现对资源检测的访问。MBean 必须遵循 JMX 规范中定义的设计模式和接口。这样做可确保所有 MBean 都以标准化方式提供托管资源检测。除了标准 MBean 之外,JMX 规范还定义了一种称为MXBean的特殊类型的MBean。MXBean 是一种仅引用一组预定义数据类型的 MBean。还存在其他类型的 MBean,但本文将集中讨论标准 MBean 和 MXBean。
一旦资源被 MBean 检测,就可以通过 JMX 代理对其进行管理。MBean 不需要了解它们将与之一起运行的 JMX 代理。
MBean 的设计目标是灵活、简单且易于实现。应用程序、系统和网络的开发人员可以以标准方式管理其产品,而无需了解或投资复杂的管理系统。只需付出最少的努力即可管理现有资源。
此外,JMX 规范的检测层还提供了一种通知机制。该机制使 MBean 能够生成通知事件并将其传播到其他层的组件。
Agent
基于 JMX 技术的代理(JMX 代理)是一种标准管理代理,它直接控制资源并使其可供远程管理应用程序使用。JMX 代理通常与其控制的资源位于同一台机器上,但这种安排不是必需的。
JMX 代理的核心组件是MBean 服务器,即注册 MBean 的托管对象服务器。JMX 代理还包括一组用于管理 MBean 的服务,以及至少一个允许管理应用程序访问的通信适配器或连接器。
当您实现 JMX 代理时,您不需要知道它将管理的资源的语义或功能。事实上,JMX 代理甚至不需要知道它将为哪些资源提供服务,因为任何符合 JMX 规范的资源都可以使用任何提供该资源所需服务的 JMX 代理。同样,JMX 代理不需要知道将访问它的管理应用程序的功能。
Remote Management
JMX 技术工具可通过多种不同方式访问,既可以通过现有管理协议(如简单网络管理协议 (SNMP))也可以通过专有协议。MBean 服务器依靠协议适配器和连接器使 JMX 代理可从代理的 Java 虚拟机 (Java VM) 之外的管理应用程序访问。
每个适配器通过特定协议提供在 MBean 服务器中注册的所有 MBean 的视图。例如,HTML 适配器可以在浏览器中显示 MBean。
连接器提供管理器端接口,用于处理管理器与 JMX 代理之间的通信。每个连接器通过不同的协议提供相同的远程管理接口。当远程管理应用程序使用此接口时,它可以通过网络透明地连接到 JMX 代理,而不管使用哪种协议。JMX 技术提供了一种基于 Java 远程方法调用 (Java RMI) 将 JMX 技术检测导出到远程应用程序的标准解决方案。
JMX 分层架构
JMX 分层架构可以分为设备层,代理层、分布服务层。
- 设备层:主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。
- 代理层:主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。
- 分布服务层:主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。
JMX 组件架构即详解
关于JMX 组件结构请参看我的另一篇文章:
JMX 组件架构即详解-CSDN博客
Java 虚拟机的监控和管理
JMX技术还可以用于监控和管理Java虚拟机(Java VM)。Java VM 具有内置工具,可让您使用 JMX 技术对其进行监视和管理。这些内置管理实用程序通常被称为Java VM 的现成管理工具。为了监视和管理 Java VM 的不同方面,Java VM 包含一个平台 MBean 服务器和特殊的 MXBean,供符合 JMX 规范的管理应用程序使用。
JConsole
Java SE 平台包含符合 JMX 规范的 JConsole 监控和管理工具。JConsole 使用 Java VM(平台 MXBeans)的广泛工具来提供有关在 Java 平台上运行的应用程序的性能和资源消耗的信息。
由于 Java SE 平台内置了实现 JMX 技术的标准监控和管理实用程序,因此您无需编写任何 JMX API 代码即可看到现成的 JMX 技术的实际应用。只需启动 Java 应用程序,然后使用 JConsole 对其进行监控即可。
使用 JConsole 监控应用程序
此过程显示如何监视 Notepad Java 应用程序。在 Java SE 平台版本 6 之前的版本中,要使用 JConsole 监视的应用程序需要使用以下选项启动。
-Dcom.sun.management.jmxremote
但是,Java SE 6 平台提供的 JConsole 版本可以附加到任何支持 Attach API 的本地应用程序。换句话说,在 Java SE 6 HotSpot VM 中启动的任何应用程序都会被 JConsole 自动检测到,无需使用上述命令行选项启动。
- 在终端窗口中使用以下命令启动 Notepad Java 应用程序:
java -jar jdk_home /demo/jfc/Notepad/Notepad.jar
Java 开发工具包 (JDK) 的安装目录在哪里
jdk_home
。如果您没有运行 Java SE 平台版本 6,则需要使用以下命令:java -Dcom.sun.management.jmxremote -jar jdk_home /demo/jfc/Notepad/Notepad.jar
- 打开记事本后,在另一个终端窗口中,使用以下命令启动 JConsole:
jconsole
将显示“新连接”对话框。
- 在新建连接对话框中,
Notepad.jar
从本地进程列表中选择,然后单击连接按钮。JConsole 打开并连接到
Notepad.jar
进程。打开 JConsole 后,您将看到与 Notepad 相关的监控和管理信息概览。例如,您可以查看应用程序消耗的堆内存量、应用程序当前运行的线程数以及应用程序消耗的中央处理器 (CPU) 容量。 - 单击不同的 JConsole 选项卡。
每个选项卡都提供了有关运行 Notepad 的 Java VM 的不同功能领域的更详细信息。所有显示的信息均来自本教程中提到的各种 JMX 技术 MXBean。所有平台 MXBean 均可显示在 MBean 选项卡中。本教程的下一部分将介绍 MBean 选项卡。
- 要关闭 JConsole,请选择“连接”->“退出”。
参考文献
官方文档 : https://docs.oracle.com/javase/tutorial/jmx/overview/index.html
【JMX】JAVA监控的基石-CSDN博客
JMX使用详解-CSDN博客