`
qianshangding
  • 浏览: 124192 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMX 和 管理系统简介(一)

 
阅读更多

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的优点在于:

  1. 可以非常容易的使应用程序具有被管理的功能
  2. 提供具有高度伸缩性的架构,每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。
  3. 主要提供接口,允许有不同的实现。

从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内部的状态,可以在此基础上构建调试、性能剖析的平台。

分享到:
评论

相关推荐

    论文研究-利用JMX改进网络管理系统中指标实时监控.pdf

    网络的迅速发展对现有网络管理系统的优化提出了迫切的...因此提出了一种利用JMX技术来改进网络管理系统中实时监控管理的一个实现模型。此模型有效地解决了实时监控中的网络拥塞、指标管理混乱、客户端负载过重等问题。

    论文研究-基于JMX的网络管理系统.pdf

    简单介绍了JMX规范,在此基础上,讨论了使用JMX体系结构建立网络管理程序的一般方法,最后结合JMX规范和实现方法,分析基于JMX网络管理系统的优势。

    基于JMX的IT系统管理关键技术研究与实现

    基于JMX的IT系统管理关键技术研究与实现,详细介绍了使用jmx的方法

    系统用户管理.jmx

    Jmeter测试,实现一次登录,多次业务请求(批量生成并注册用户)。主要实现方式是通过setUp线程组设置登录请求,在循环控制器下使用beanshell脚本自动生成用户名、账号,...每一个元件的作用都写在comments(注释)里。

    java利用JMX做出不一样的的JVM.docx

    JMX 既是 Java 管理系统的一个标准,一个规范,也是一个接口,一个框架。有标准、有规范是为了让开发者可以定制开发自己的扩展功能,而且作为一个框架来讲,JDK 已经帮我们实现了常用的功能,尤其是对 JVM 的监控和...

    mx4j 开发包,JMX的实现

    mx4j是jmx的开源框架实现,可实现系统开发的微内核管理

    JMX.rar_jmx_osgi

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。文件里面包含jmx开发5个常见的jar包,其中还有些example。

    JMX in action.pdf

    JMX应该说是关于网络应用管理的的框架,如果你开发了一个比较复杂的系统,无疑你要提供这个系统的自身管理 系统,JMX更多应用是体现在Server上,如果你要使用java开发一个自己Server或复杂的应用系统,那么推荐你...

    jmx in action doc版

    JMX应该说是关于网络应用管理的的框架,如果你开发了一个比较复杂的系统,无疑你要提供这个系统的自身管理 系统,JMX更多应用是体现在Server上,如果你要使用java开发一个自己Server或复杂的应用系统,那么推荐你...

    网络游戏-基于JMX的网络业务管理方法及其应用系统.zip

    网络游戏-基于JMX的网络业务管理方法及其应用系统.zip

    JMX-how-to-use.rar_jmx_服务器_远程监控 文件

    光宇java的JMX远程服务器管理监控系统的帮助文件,说明了JMX在javaweb中的一些应用及应用方法。

    论文研究-一种构件级动态集群管理系统的设计与实现.pdf

    设计并实现了一种构件级集群动态管理系统,支持在构件级别进行应用服务器集群管理。它基于OSGi框架组织管理系统构件,并通过构件管理代理支持基于JMX的远程管理。最后通过实验展示了系统效果,最终验证了构件级管理...

    javasnmp源码-02-jmx-demo:如何使用JMX来管理程序

    在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。 Agent 用来管理相应的资源,并且为远端用户提供访问的接口。该层的核心是MBeanServer,...

    利用Java内置的API开发JMX功能

    但如果是开发的一个复杂系统(如一个电商平台、一个企业内部管理系统),则该系统本身也需要被管理,如需要了解这个软件的运行情况,比如某些状态是否正常、当前登录用户数,还有可能需要动态的调整系统的某些参数,...

    基于微服务的车票管理系统源码+项目说明+sql数据库.tar

    基于微服务的车票管理系统源码+项目说明+sql数据库.tar 功能描述:微服务车票系统,分管理员和普通用户两种角色。除了基本功能,可实现限流,一人一单,每日热搜等功能 #### 涉及技术栈:MySQL,Redis,RabbitMQ,...

    论文研究-多方位网络拓扑发现的通用算法与技术实现.pdf

    网络拓扑发现的算法和实现技术是衡量网络管理系统性能的一个重要方面。通过开发网络管理系统网络拓扑发现服务模块过程中获得的理论和实践经验,提炼了物理拓扑发现(网络层和子网层发现),逻辑结构发现(虚拟局域网...

    TaylorManagement:是管理 JMX 库

    可以通过 WAS 远程服务器获取有关系统和 JVM 的信息。 它提供了一个直观的界面,因此任何人都可以轻松使用它。 如何使用 启动WAS时,一定要在JVM选项中添加以下选项(No Secure Mode方法) -Dcom.sun.management....

    java版ss源码-jmxproxy:JMX到HTTP代理

    例如,要为应用程序和管理 servlet 配置侦听端口: server : type : simple applicationContextPath : / connector : type : http port : 8000 请注意,指定applicationContextPath很重要,否则所有请求都必须在 UR

    培训体系管理系统-oracle-ssh

    jboss-jmx.jar jboss-system.jar jdbc2_0-stdext.jar jgroups-2.2.8.jar jstl.jar jta.jar jxl.jar log4j-1.2.11.jar log4j-1.2.14.jar mysql-connector-java-3.1.13-bin.jar Oracle10g.jar oscache-2.1.jar ...

Global site tag (gtag.js) - Google Analytics