JMX 是管理系统和资源之间的一个接口,它定义了管理系统和资源之间交互的标准。javax.management.MBeanServer实现了 Agent 的功能,以标准的方式给出了管理系统访问 JMX 框架的接口。而从类库的层次上看,JMX 包括了核心类库 java.lang.management和 javax.management包。java.lang.management包提供了基本的 VM 监控功能,而 javax.management包则向用户提供了扩展功能。
架构图:
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。 JMX的优点在于:
- 可以非常容易的使应用程序具有被管理的功能
- 提供具有高度伸缩性的架构,每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。
- 主要提供接口,允许有不同的实现。
从JAVA 5开始,JDK就提供非常有名的java.lang.management 包,包里提供了许多MXBean的接口类,开发者可以很方便的获取到JVM的内存、GC、线程、锁、class、甚至操作系统层面的各种信息。
首先,简要介绍下JMX(Java Management Extensions),即JAVA管理扩展,用来监视和管理JVM以及其运行的操作系统。目前java平台主要提供了下图所示的12个MXBean。
java.lang.management.BufferPoolMXBean : 管理缓冲池的接口。例如:java.nio.ByteBuffer#allocateDirect direct或者java.nio.MappedByteBuffer mapped的缓冲池。
java.lang.management.ClassLoadingMXBean : 管理JVM类加载系统的接口。提供JVM的JIT(Just In Time)编译器(将bytecode编译成native code)的信息。Java 虚拟机具有此接口的实现类的单个实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getClassLoadingMXBean() 方法或从ManagementFactory.getPlatformMBeanServer方法获得。
在 MBeanServer 中唯一标识类加载系统的 MXBean 的 ObjectName 为:
java.lang:type=ClassLoading
java.lang.management.CompilationMXBean:管理JVM编译系统的接口。 Java 虚拟机具有此接口的实现类的单个实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getClassLoadingMXBean() 方法或从ManagementFactory.getPlatformMBeanServer方法获得。
在 MBeanServer 中唯一标识编译系统的 MXBean 的 ObjectName 为:
java.lang:type=Compilation
com.sun.management.HotSpotDiagnosticMXBean : 可以用于获取VM信息。它支持dumpHeap(String outputFile, boolean live)操作,让Java程序能直接指定路径和是否只要活对象进行heap dump。
在 MBeanServer 中唯一标识编译系统的 MXBean 的 ObjectName 为:
com.sun.management:type=HotSpotDiagnostic
java.lang.management.MemoryManagerMXBean : 内存管理器的管理接口。内存管理器管理 Java 虚拟机的一个或多个内存池。
Java 虚拟机具有一个或多个内存管理器。实现此接口的实例是 MXBean,可以通过调用 ManagementFactory.getMemoryManagerMXBeans() 方法或从平台ManagementFactory.getPlatformMBeanServer方法获得。
在 MBeanServer 内唯一标识内存管理器的 MXBean 的 ObjectName 为:
java.lang:type=MemoryManager,name=manager's name
java.lang.management.MemoryMXBean:JVM内存系统的管理接口。Java 虚拟机具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getMemoryMXBean() 方法或从ManagementFactory.getMemoryManagerMXBeans()方法获得。
在 MBeanServer 中唯一标识内存系统的 MXBean 的 ObjectName 为:
java.lang:type=Memory
java.lang.management.MemoryPoolMXBean :内存池的管理接口。内存池表示由JVM管理的内存资源,由一个或多个内存管理器对内存池进行管理。JVM具有此接口的实现类的一个或多个实例。实现此接口的实例是 MXBean,可以通过调用 ManagementFactory.getMemoryPoolMXBeans() 方法或从ManagementFactory.getMemoryManagerMXBeans()方法获得。
在 MBeanServer 中惟一标识内存池的 MXBean 的 ObjectName 为:
java.lang:type=MemoryPool,name=pool's name
java.lang.management.OperatingSystemMXBean :用于操作系统的管理接口,JVM在此操作系统上运行。JVM具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getOperatingSystemMXBean() 方法或从ManagementFactory.getMemoryManagerMXBeans()方法获得。
用于在 MBeanServer 中唯一标识操作系统的 MXBean 的 ObjectName 为:
java.lang:type=OperatingSystem
java.lang.management.PlatformLoggingMXBean :java.util.logging的管理接口,JVM在此操作系统上运行。JVM具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getPlatformMXBean() 方法或从ManagementFactory.getPlatformMBeanServer()方法获得。
用于在 MBeanServer 中唯一标识操作系统的 MXBean 的 ObjectName 为:
java.util.logging:type=Logging
java.lang.management.RuntimeMXBean: JVM的运行时系统的管理接口。JVM具有此接口的实现类的单一实例。实现此接口的实例是一个MXBean,它可以通过调用 ManagementFactory.getRuntimeMXBean() 方法或从ManagementFactory.getPlatformMBeanServer()方法获得。
在 MBeanServer 中唯一标识运行时系统的 MXBean 的 ObjectName 为:
java.lang:type=Runtime
jdk.management.cmm.SystemResourcePressureMXBean:从 JDK 8u40 开始,在 JDK 中增加了“内存压力”的概念。内存压力属性代表系统上的总内存使用量 (RAM)。内存压力越高,系统越接近于用完内存。这是实验性功能,尚不允许商用。为了应对内存压力增大,JDK 将尝试减少其内存使用量。主要通过减少 Java 堆大小来实现这一点。JDK 为减少内存使用量而采取的操作可能会导致性能降低。这是特意的选择。应用程序通过 JMX MXBean
提供压力级别,范围从 0(无压力)到 10(几乎用尽内存)。要启用此功能,应注册 jdk.management.cmm.SystemResourcePressureMXBean。然后,使用 "MemoryPressure" 属性设置内存压力。
此外还提供了一个新的命令行标记 -XX:MemoryRestriction,它采用参数 "none"、"low"、"medium" 或 "high" 之一。此标记将在 JDK 中设置初始压力,对于未注册 MXBean 的情况,此标记同样起作用。协作内存管理需要 G1 GC (-XX:+UseG1GC)。此功能与 -XX:+ExplicitGCInvokesConcurrent 标记不兼容。
java.lang.management.ThreadMXBean: Java 虚拟机线程系统的管理接口。 JVM具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getThreadMXBean() 方法或从ManagementFactory.getPlatformMBeanServer()方法获得它。
在 MBeanServer 内唯一标识线程系统的 MXBean 的 ObjectName 是:
java.lang:type=Threading
平台资源
对应的 MXBean
可使用的数量
缓冲池 |
BufferPoolMXBean
|
1个或多个
|
类装入系统
|
ClassLoadingMXBean
|
1个
|
编译系统 |
CompilationMXBean
|
1个
|
VM |
HotSpotDiagnosticMXBean
|
|
垃圾收集系统 |
GarbageCollectorMXBean
|
至少 1 |
内存管理器
|
MemoryManagerMXBean
|
1个或多个
|
内存 |
MemoryMXBean
|
1个
|
内存资源
|
MemoryPoolMXBean
|
1个 |
操作系统
|
OperatingSystemMXBean
|
1个 |
logging
|
PlatformLoggingMXBean
|
1个
|
运行时系统
|
RuntimeMXBean
|
1个 |
系统资源压力 |
SystemResourcePressureMXBean
|
|
线程 |
ThreadMXBean |
1个 |
具体的每个接口实现了什么功能,可以看源码,其实看接口里面方法的定义就可以明白大概的意思。
java.lang.management包中的mxbean提供了基本的功能,在sum.com.management中对某些功能有所增强,当然我们也可以根据JMX规范提供自己的MXBean。通过如上的这些接口,我们可以获得运行的JVM很详细的信息,从运行JVM、操作系统,到内存、GC和线程,缓冲池,日志,系统压力都可以通过这些标准的接口获取到,来对系统进行全方位的监控。这些接口描述的主要是JVM的总体性的信息,而无法提供更多的细节。如果要了解更多JVM内部信息,可以使用JPDA。JPDA(Java
Platform Debugger Architecture)提供了JVM内部的访问接口,让我们可以方便地了解JVM内部的状态,可以在此基础上构建调试、性能剖析的平台。
分享到:
相关推荐
- 协议适配器(Protocol Adaptors):将特定的协议转换为JMX协议,使得基于不同协议的系统可以访问JMX管理系统。 - 代理层(Proxy Layer):JMX代理是一组服务和工具的集合,可以在远程管理JMX应用程序。 - 资源封装...
JMX是一种用于管理基于Java的应用程序的技术标准,它提供了一种将资源管理系统化的方法。JMX由三个主要部分组成:MBean服务器、MBeans(Managed Beans)以及代理(Agent)。 - **MBean服务器**:作为管理域的核心,...
它主要用于监控和管理系统资源,包括但不限于应用程序、硬件设备以及网络资源等。通过使用JMX,开发者能够方便地集成管理功能到他们的Java应用程序中。 JMX的核心价值在于它为Java应用程序提供了一种统一的管理框架...
Java Management Extensions (JMX) 是Java平台的一个标准API,用于创建、管理和监控各种资源,如Java应用程序、网络设备、操作系统等。JMX提供了一种标准的方式来注册MBeans(Managed Beans),这些MBeans是代表可...
此外,书中还涉及到了安全管理,包括JMX连接的安全策略和认证机制,以确保管理系统安全可靠。 PDF格式的《JMX in Action》提供了方便的电子阅读体验,读者可以轻松查阅、检索和分享内容。这本书适合Java开发者、...
总的来说,`jmx-tools.zip`提供了JMX管理和监控的工具集合,特别是`HtmlAdaptorServer`,它扩展了JMX的功能,使得通过HTTP接口访问和管理JMX代理成为可能,大大增强了JMX的易用性和可访问性。对于Java开发者和运维...
总的来说,JMX是一个强大的工具,它让开发者能够轻松地对Java应用进行监控和管理,通过暴露管理接口,使得运维人员可以在运行时动态调整应用程序的行为,提高系统的可维护性和稳定性。通过学习和实践JMX,开发者可以...
JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念包括MBeans...
JMX 提供了一种框架,使得开发者能够轻松地在他们的软件中添加管理和监控的功能,无论这些软件运行在何种操作系统、架构或网络环境中。JMX 的核心组成部分包括: 1. **设备层(Instrumentation Level)**:在这个...
网络的迅速发展对现有网络管理系统的优化提出了迫切的...因此提出了一种利用JMX技术来改进网络管理系统中实时监控管理的一个实现模型。此模型有效地解决了实时监控中的网络拥塞、指标管理混乱、客户端负载过重等问题。
JMX(Java Management Extensions)是一种Java平台标准,用于管理和监控应用程序。在本实战中,我们将深入探讨如何利用JMX对HBase和Hadoop进行监控,以确保系统的稳定性和性能。 首先,我们需要理解HBase。HBase是...
它可以是任何Java对象,通过它,我们可以暴露管理接口,让外部工具或管理系统能够访问和操作。 2. **MBeanServer**:MBeanServer是JMX的核心组件,负责注册MBean,执行MBean的操作,并提供查询和管理MBean的能力。 ...
JMX允许开发者创建可管理和自描述的组件,称为Managed Beans(MBeans),这些组件可以被操作系统或网络管理系统用来监控和配置。 ### JMX 简介 JMX 不仅仅是一个接口,而是一套完整的规范,允许开发者将管理功能...
jmx(Java Management Extensions)是一种Java技术,为Java应用程序提供了管理和监控的功能。ActiveMQ是Apache软件基金会下的一个开源消息队列系统,提供了高效、可靠的消息传递服务。在生产环境中, ActiveMQ的监控...
JMX允许开发者创建和注册MBeans(Managed Beans),这些MBeans代表了可管理的资源,从而实现对系统的监控和管理。当我们谈论"jboss远程调用JMX"时,我们关注的是如何通过网络从一个JMX客户端连接到运行在JBoss服务器...
"JMX Html适配器相关jar" 是针对JMX的一个重要组件,它允许通过HTML界面来访问和操作JMX管理组件。在默认的Java Development Kit (JDK)中,虽然提供了基于Java Swing的JConsole工具来与JMX交互,但不包含HTML适配器...
Java Management Extensions(JMX)是Java平台中用于管理和监控应用程序、操作系统、网络设备等资源的一种标准框架。通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以...
MBeans可以通过JMX代理暴露出来,使得管理员或管理系统能够通过JMX API进行访问和操作。 在JMX中,MBeans主要有三种类型:Standard MBeans、Dynamic MBeans和Model MBeans。Standard MBeans是预定义了管理接口的类...
此时,JMX作为一种标准的Java平台管理系统接口,提供了统一的管理视图,使得管理员能够实时监控和调整Coherence集群的状态,从而实现性能优化和故障排查。 #### 启用JMX管理的配置 为了在Coherence集群中启用JMX...
它可能还涵盖了JMX连接器,这是JMX与外部管理系统通信的桥梁,如Java的JConsole或VisualVM工具。 此外,“src”目录可能包含了示例代码,帮助读者理解如何在实践中实现JMX功能。这些代码可能展示了如何定义MBeans、...