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 和 管理系统简介(一)相关推荐

  1. 为Web应用建立基于JMX的管理系统

    Web应用系统总算开发了,接下来该如何让客户(Web应用系统的管理员)轻松管理我的一堆配置文件,或者如何实现动态修改系统运行属性,同时又让客户不需要过多的了解配置文件的内容就能够实现这些管理呢?这是许 ...

  2. Git 版本管理系统简介和远程仓库

    版本管理系统简介 项目的版本 版本和我们平常说的软件.游戏等的版本是一个意思,比如 1.2.8 版本.比如 第1版,比如webstorm2020. 所以,版本指的就是代码编写进度当中的一些节点. 比如 ...

  3. 第二十五章《图书管理系统》第1节:图书管理系统简介

    图书管理系统具有图书信息管理.读者信息管理和借阅信息管理三大功能模块,本小节将从软件功能.数据库系统设计和项目结构几个方面介绍该软件系统的设计方案. 25.1.1系统功能简介 图书管理系统第一大功能模 ...

  4. 第二十四章《学生信息管理系统》第1节:学生信息管理系统简介

    学生信息管理系统用于管理学生基本信息,该系统除能够大大的帮助学籍管理人员提高工作效率.本小节将从软件功能.数据库系统设计和项目结构几个方面介绍该软件系统的设计方案. 24.1.1系统功能简介 学生信息 ...

  5. Google DFP广告管理系统简介:使用自家广告

    您将要创造的 这是有关DFP广告管理系统的系列教程中的第六篇. 对于初学者来说,DFP广告管理系统似乎非常复杂,而我们的系列旨在简化DFP广告管理系统. 在本教程中,我将指导您配置一组内部自家广告,这 ...

  6. Google DFP广告管理系统简介:下订单

    您将要创造的 这是有关DFP广告管理系统的系列教程中的第四篇. 对于初学者来说,DFP广告管理系统似乎非常复杂,因此本系列旨在简化它. 如果您拥有一个或两个网站访问量适中的网站,并且想知道如何最好地产 ...

  7. hdfs mv命令_大数据入门:HDFS文件管理系统简介

    Hadoop作为大数据主流的基础架构选择,至今仍然占据着重要的地位,而基于Hadoop的分布式文件系统HDFS,也在大数据存储环节发挥着重要的支撑作用.今天的大数据入门分享,我们就主要来讲讲HDFS分 ...

  8. 数据库系统、数据库、数据库管理系统简介,MySQL等服务器的比较

    一.数据库系统.数据库.数据库管理系统 DBS包括DB和DBMS. 1.DBS是Database System的缩写,数据库系统. 2.DB是database的缩写,数据库. 3.DBMS是Datab ...

  9. MES制造执行管理系统简介

    MES系统概述 MES系统即制造企业生产过程执行管理系统,是一套面向制造企业车间执行层的生产信息化管理系统.MES 可以为企业提供包括制造数据管理.计划排程管理.生产调度管理.库存管理.质量管理.人力 ...

  10. [管理] 条码库存管理系统与 RFID 无线管理系统简介

    随着市场经济的高速发展,国内企业大多都面临着国际竞争的压力,尽管国内一部分大型企业在全国范围内建立了许多专卖店,形成了比较完善的营销网络体系,而且部分实施了ERP企业资源管理系统,但在建设现代化的物流 ...

最新文章

  1. Xcode代码不提示或提示慢
  2. 有勇气的牛排 --- 攻防
  3. php 头bom_关于php中bom头的简介
  4. QT学习:代理(Delegate)练习
  5. android h5控制锁屏,WebView播放H5课件时,锁屏解锁后,页面重新绘制的问题
  6. Enum枚举类|注解Annotation
  7. rust最低什么显卡能游戏_腐蚀Rust配置要求汇总 腐蚀Rust游戏配置要求是什么_游侠网...
  8. vue:无法将“vue”识别为脚本_Vue3将带来巨大的性能提升
  9. python后台架构Django教程——路由映射urls
  10. JDK动态代理的使用,以及可以解决哪些问题和优点,什么是动态代理
  11. 局域网传文件_Mac下最好用的跨平台文件传输工具
  12. google账号已停用(已解决)
  13. 《互联网营销的流量池思维》——听课有感
  14. conda 环境复制
  15. 【转】最落魄的日子你是怎样熬过来的?
  16. Kotlin基础知识5
  17. 招商银行笔试题之爱吃喵粮的小招喵
  18. python数据分析与应用-Python数据分析与应用-课后习题答案
  19. CSSAPP稀里糊涂的读书笔记(一)计算机系统漫游
  20. 祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念【转载】

热门文章

  1. 【CTS】Ubuntu下安装CTS测试环境
  2. 深入理解操作系统——datalab-handout
  3. 修改Git提交历史中的author,email和name等信息
  4. vscode折叠/展开所有区域代码快捷键 注释快捷键
  5. C++-灰度图上色GrayToColor
  6. MariaDB 10.6.10离线安装
  7. python实现12306火车票查询
  8. SqlServer2008操作总结
  9. 18位身份证号码含义及验证算法代码
  10. 计算机组装与维护补考论文,计算机组装与维护课程教学论文