Lesson: Overview of the JMX Technology (The Java™ Tutorials > Java Management Extensions (JMX)) https://docs.oracle.com/javase/tutorial/jmx/overview/index.html
Lesson: Overview of the JMX Technology
The Java Management Extensions (JMX) technology is a standard part of the Java Platform, Standard Edition (Java SE platform). The JMX technology was added to the platform in the Java 2 Platform, Standard Edition (J2SE) 5.0 release.
The JMX technology provides a simple, standard way of managing resources such as applications, devices, and services. Because the JMX technology is dynamic, you can use it to monitor and manage resources as they are created, installed and implemented. You can also use the JMX technology to monitor and manage the Java Virtual Machine (Java VM).
The JMX specification defines the architecture, design patterns, APIs, and services in the Java programming language for management and monitoring of applications and networks.
Using the JMX technology, a given resource is instrumented by one or more Java objects known as Managed Beans, or MBeans. These MBeans are registered in a core-managed object server, known as an MBean server. The MBean server acts as a management agent and can run on most devices that have been enabled for the Java programming language.
The specifications define JMX agents that you use to manage any resources that have been correctly configured for management. A JMX agent consists of an MBean server, in which MBeans are registered, and a set of services for handling the MBeans. In this way, JMX agents directly control resources and make them available to remote management applications.
The way in which resources are instrumented is completely independent from the management infrastructure. Resources can therefore be rendered manageable regardless of how their management applications are implemented.
The JMX technology defines standard connectors (known as JMX connectors) that enable you to access JMX agents from remote management applications. JMX connectors using different protocols provide the same management interface. Consequently, a management application can manage resources transparently, regardless of the communication protocol used. JMX agents can also be used by systems or applications that are not compliant with the JMX specification, as long as those systems or applications support JMX agents.
# If this file is placed at FLUME_CONF_DIR/flume-env.sh, it will be sourced
# during Flume startup.
# Enviroment variables can be set here.
# export JAVA_HOME=/usr/lib/jvm/java-8-oracle
# Give Flume more memory and pre-allocate, enable remote monitoring via JMX
# export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"
# Let Flume write raw event data and configuration information to its log files for debugging
# purposes. Enabling these flags is not recommended in production,
# as it may result in logging sensitive user information or encryption secrets.
# export JAVA_OPTS="$JAVA_OPTS -Dorg.apache.flume.log.rawdata=true -Dorg.apache.flume.log.printconfig=true "
# Note that the Flume conf directory is always included in the classpath.
#FLUME_CLASSPATH=""
[root@hadoop1 apache-flume-1.8.0-bin]#
Java Management Extensions - Wikipedia https://en.wikipedia.org/wiki/Java_Management_Extensions
JMX uses a three-level architecture:
- The Probe level - also called the Instrumentation level - contains the probes (called MBeans) instrumenting the resources
- The Agent level, or MBeanServer - the core of JMX. It acts as an intermediary between the MBean and the applications.
- The Remote Management level enables remote applications to access the MBeanServer through connectors and adaptors. A connector provides full remote access to the MBeanServer API using various communication (RMI, IIOP, JMS, WS-* …), while an adaptor adapts the API to another protocol (SNMP, …) or to Web-based GUI (HTML/HTTP, WML/HTTP, …).
Applications can be generic consoles (such as JConsole[5] and MC4J[6]) or domain-specific (monitoring) applications. External applications can interact with the MBeans through the use of JMX connectors and protocol adapters. Connectors serve to connect an agent with a remote JMX-enabled management application. This form of communication involves a connector in the JMX agent and a connector client in the management application.
Protocol adapters provide a management view of the JMX agent through a given protocol. Management applications that connect to a protocol adapter are usually specific to the given protocol.
一、JMX官方指导文档 之 JMX概述 - CSDN博客 https://blog.csdn.net/jiaotuwoaini/article/details/71076143
JMX概述
JMX(Java Management Exrensions)技术是标准Java平台的一部分。JMX技术从J2SE 5.0发布的时候添加到Java2平台。
JMX提供了一个标准的方法去管理资源,例如:应用,设备和服务。因为JMX是一种动态技术,你可以在被管理资源创建、实例化和实现的时候监控和管理他们。你也可以使用JMX技术去监听和管理Java虚拟机。
JMX规范为Java语言定义了监听应用程序和网络所需要的架构、设计模式,API和服务。
在JMX中,一个给定的资源被描述成一个或多个被管理的Bean(Managed Beans 或者 MBeans)。这些MBeans被注册到一个中心管理对象服务器,叫做MBean Server。
MBean Server作为一个管理代理可以在几乎所有的支持Java的设备上。
规范定义了JMX代理,你可以使用它管理所有已经被正确配置的资源。一个JMX代理包括一个MBean Server(注册MBean的地方)和一系列处理MBean的服务。使用这种方法可以让远程的管理系统通过JMX代理可以直接控制资源。
因为资源管理的方式和管理的基础设施完全独立,因此资源可以被管理,而不用关心他们是如何实现的。
JMX定义了标准的连接器(JMX连接器)去确保你可以通过远程管理应用访问JMX代理。JMX连接器为同样的管理接口提供了不同的协议。因此,管理应用程序可以不管使用的连接协议透明的管理资源。当然了JMX代理也可以用于不符合JMX规范的系统或者应用,只要这些系统或者应用支持JMX代理。
为什么使用JMX?
JMX技术为开发者提供了一套灵活的方式给基于Java的应用程序创建智能代理、实现分布式中间件管理并且平滑地整合现存的管理和监控系统。
* JMX技术使Java应用程序无需在管理方面投入大量精力。
基于代理的JMX技术可以在几乎所有的支持Java的设备上运行。因此Java程序变成可管理对他们的设计影响不大。Java程序仅仅只需嵌入一个管理对象服务器,使它的一些功能作为一个或几个被管理的bean(MBean)在目标服务器上注册。然后就可以从管理基础设施中受益。
* JMX技术提供了一个标准的方法去管理Java应用、系统和网络。
例如,企业版应用服务器(JavaEE5)符合JMX架构,因此可以通过JMX技术管理。
* JMX技术可以被用于JAVA虚拟机的外部管理
JAVA虚拟机深度使用了JMX技术。你可以开启一个JMX代理去访问JVM内置的设施,并且远程监控和管理JVM。
* JMX技术提供了一个可伸缩的,动态的管理架构。
每一个JMX代理服务都是根据不同的需求被独立的插入到管理代理中的。这种基于组件的方法意味着JMX解决方案可以伸缩地支持从小型设备到大型电信交换机。JMX规范提供了一套核心的代理服务。附加的服务可以在管理设施中被动态的加载、卸载或者更新。
* JMX技术使用了现有的标准JAVA技术
不论什么时候需要,JMX都可以引用现存的Java规范,例如:JAVA命名和目录接口(JNDI)。
* 基于JMX技术的应用程序(JMX应用)可以从NetBeans的IDE模块创建
你可以从NetBeans Update Center(选择 Tools->Update Center)来开启你的JMX应用。这减少了开发JMX应用的花费。
* JMX整合了现有的管理解决方案和新兴技术
JMX APIs是开放的接口,任何管理系统的供应商都可以自己实现。JMX解决方案可以使用查找、发现服务和协议如:Jini网络技术和服务定位协议(SLP)
JMX技术架构
JMX技术可以分为三层:
* 设备层
* JMX代理
* 远程管理
设备
为了使用JMX技术管理资源,你首先得用Java语言来描述你的资源。你可以使用Java对象,MBeans去实现对资源访问的描述。MBeans必须遵循JMX规范里面定义的设计模式和接口。这样可以确保所有的MBeans提供的被管理资源描述是统一的。尤其是标准的MBeans,JMX规范定义了一种特殊的MBean类型叫做MXBean。MXBean是一种仅仅提供预定义数据类型的MBean。其他的MBean也存在,但是这个文档主要关注标准MBeans和MXBeans。
一旦一个资源被描述为MBeans,它可以通过JMX代理被管理。MBeans不需要知道JMX代理是怎样操作它的。
MBeans被设计成灵活的、简单的并且容易去实现的。应用程序、系统和网络的开发人员可以使他们的产品以标准的形式管理,而不必了解或关注与复杂的管理系统。现有的资源可以通过最少的改动被管理。
总的来说,JMX规范的设备层提供了一个通知机制。这种机制确保MBeans去生成并且扩散通知事件到其他层的组件。
JMX代理
JMX代理是一种标准的管理代理在,直接控制资源并且使他们对远程的管理系统可用。JMX代理通常和他们控制的资源在同一个机器,但是这种安排也不是必须的。
JMX代理的核心组件是MBean Server,MBean被注册的对象管理服务器。因此一个JMX代理包含一系列的服务和被管理的MBeans和至少一个通信适配器或者连接器来保障管理应用程序的访问。
当你实现了一个JMX代理,你不需要知道被管理资源的语义或功能。事实上,JMX代理甚至不要知道哪个资源它将要服务,因为符合JMX规范的资源可以使用JMX代理提供资源需要的服务。相似的,JMX也不需要知道被管理应用的功能。
远程管理
JMX技术可以通过多种不同的方法去访问,使用现存的管理协议例如:简单网络管理协议(SNMP)或者专有协议。MBean server依赖于协议适配器和连接器来让JMX代理可以被代理JVM外面的管理系统访问。
每个适配器通过一个给定的协议为MBean server中注册的所有MBeans提供一个视图。例如, 一个HTML适配器可以展示MBean在浏览器中。
连接器提供一个管理边的接口处理JMX代理和管理系统的交互。每一个连接器使用不同的协议提供了同样的远程管理接口。当一个远程管理系统使用这个接口的时候,它可以通过网络透明地连接JMX代理,而不用关心这个协议。JMX技术提供了标准的解决方案,基于java远程方法调用
Java虚拟机的监控和管理
JMX技术也可以用于监视和管理Java虚拟机(JVM)。
JVM已经内建了设备确保你可以通过JMX技术来监听和管理。内建的工具通常被JVM外面的管理工具使用。为了监听和管理JVM的不同方面,JVM包含了平台符合JMX规范的MBean server和特殊的MXBeans。
平台MXBeans和平台MBean Server
平台MXBean是JavaSE平台提供的一系列MXBeans用于监视和管理JVM和Java运行时环境(JRE)的其他组件。每一个平台MXBean封装了JVM功能的一部分,例如:类加载系统、实时编译系统(JIT)、GC等等。这些符合JMX规范的MXBeans可以使用监控和管理工具交互,使你能够监控和管理这些不同虚拟机功能。Java平台提供了一个这样的可视化监视和管理系统--JConsole。
JavaSE平台也提供了一个标准的注册MXBeans的平台MBean server。平台MBean server也可以注册其他你想要创建的的MBeans。
JConsole
JavaSE平台也包括了符合JMX规范的JConsole监控和管理工具。JConsole使用JVM(平台MXBeans)扩展的设备提供关于性能和平台运行应用程序消耗的资源信息。
管理的箱外操作
因为JavaSE平台内建了实现JMX技术的标准监控和管理工具,你可以不用写一行JMX API代码在箱外查看。你也可以加载一个Java程序然后使用JConsole。
使用JConsole监控应用
这个过程展示了如何去监控Java记事本程序。JDK1.6之前你想要在JConsole中监控应用程序,你需要加入这个操作:
-Dcom.sun.management.jmxremote
然而从JDK1.6开始,你可以连接到任何支持API的本地应用。换一句话说,任何运行在JavaSE6的HotSpot虚拟机上的应用都可以被JConsole自动检测到,并且不需要使用上面的命令行选项。
1.通过使用下列终端窗口的命令开始Java记事本应用
java -jar jdk_home/demo/jfc/Notepad/Notepad.jar
jdk_home是你JDK的安装目录,如果你没有使用JDK1.6之后的版本你需要使用下面的命令:
java -Dcom.sun.management.jmxremote -jar jdk_home/demo/jfc/Notepad/Notepad.jar
2.一旦记事本被打开,在另外一个终端窗口中通过使用下面的命令开始JConsole
jconsole
一个新的连接对话框被打开
3.在新的连接对话框的进程列表中选中Notepad.jar,然后点击连接按钮。
JConsole打开并且连接到Notepad.jar进程。当JConsole打开时,会出现一个NotePad相关的概述监控和管理信息。例如: 你可以看到这个应用消耗的堆内存,当前运行的线程数目和CPU性能。
4.点击不同的JConsole标签
每一个选项卡都提供了关于JVM运行Notepad不同区域功能的更详细信息。所有的信息都是通过不同的MXBeans获取的。所有的平台MBeans可以展示在MBeans标签页上。MBeans标签是文档下一节的内容。
5.选择连接然后退出。