什么是JMX
Java管理扩展(JMX)API是管理和监视应用程序和服务的标准。
它定义 -
- 管理体系结构
- 设计模式
- apis
- 服务
用于构建基于Web的,分布式,动态和模块化解决方案来管理启用Java的资源。 JMX API使从网络手机到设置框再到网络设备和服务器都可以向启用Java的应用程序添加可管理性。
JVM为您提供了一组MBEANS,您可以通过它们访问运行时数据,例如内存消耗, gc stats 和更多数据。您还可以调用许多操作。您的应用服务器还将为您提供许多MBEAN,您可以用来控制服务器和安装应用程序。
JMX概述
JMX技术是Java编程语言的原生。
java.lang.management软件包提供了用于监视和管理JVM的接口。
API提供了对以下信息的访问。
- 已加载的类数量和线程运行
- 虚拟机正常运行时间,系统属性和JVM输入参数
- 线程状态,线程竞争统计和实时线程的堆栈轨迹
- 记忆消耗
- 垃圾收集统计
- 低内存检测
- 按需僵局检测
- 操作系统信息
API包括记录监视和管理功能。 java.util.logging.loggingmxbean界面提供了记录设施的管理。
结果,它为基于Java的应用提供了自然,高效且轻巧的管理扩展。它由一套规格和开发工具组成,用于管理Java环境并为应用和服务开发最新的管理解决方案。它为Java开发人员提供了仪器java代码,创建智能Java代理,实施分布式管理中间件和管理人员的手段,并将这些解决方案集成到现有的管理和监视系统(例如APM)
JMX技术体系结构的动力学使您能够使用它来监视和管理实现和安装资源。它也可以用于监视和管理JVM
JMX的层架构
JMX技术提供了一个分层的体系结构,可以将托管资源和管理应用程序集成到插件方法中,如下图所示。给定的资源由一个称为Managed Beans (or MBeans)
的一个或多个Java对象进行仪器,该对象在称为MBean server
的核心托管对象服务器中注册。该服务器充当管理代理,可以在大多数启用Java的设备上运行。
因此,在这部分中,讨论的话题将是经理级别。但是在进入之前,让我们概述所有级别
级别 | 描述 |
---|---|
仪器 | 资源(例如应用程序,设备或服务)使用称为托管豆(MBEANS)的Java对象进行仪器。 MBEAN通过JMX代理用于远程管理和监视。 |
代理 | JMX代理的主要组件是MBEAN服务器。这是核心托管对象服务器,其中MBEAN被注册。 JMX代理还包括一组用于处理MBEANS的服务。 JMX代理直接控制资源并使它们可用于远程管理代理。 |
经理 | 协议适配器和标准连接器使从代理S Java虚拟机(JVM)之外的远程管理应用程序访问JMX代理。 |
经理级别:
JMX API仪器可以通过现有管理协议访问。例如简单的网络管理协议(SNMP)。另一种方法是通过专有协议。 MBEAN服务器依靠协议适配器和连接器来使JMX代理可以从代理S JVM之外的管理应用程序访问。
每个适配器通过MBEAN服务器中注册的所有MBEAN的特定协议提供了视图。例如,HTML适配器可以在浏览器中显示MBEAN。
连接器提供一个经理端接口,该接口处理经理与JMX代理之间的通信。每个连接器通过不同的协议提供相同的远程管理接口。当远程管理应用程序使用此界面时,它可以通过网络透明地连接到JMX代理,而不管协议如何。
图形JMX监视工具jconsole
,使我们能够监视JVM和仪器应用程序的性能,提供信息以帮助您优化性能。
现在,我们将探索与JConsole不同的VisualVM
使用的连接器之一。 JCONSOLE仅使用JMX,但是VisualVM除了JMX之外,使用JVMSTAT,附加API和SA等其他监视技术。它可以在一个地方合并所有这些监视技术的数据,并且用户不需要考虑他在特定情况下应该使用哪种技术。
VisualVM有助于获取有关JVM及其性能的大量信息。但是我们只会研究VisualVM
中的JMX连接使用JMX设置VisualVM:
启动时下载VisualVM后将查找所有本地JVM实例。需要通过指定主机和JMX端口来添加远程连接,该端口需要在运行应用程序作为系统属性时进行设置。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9875
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
此配置适用于非生产用例,因为端口正在使用任何SSL安全性。在这里,JMX端口为9875,然后我们需要从VisualVM连接到此端口。此端口默认情况下给定。
现在,在VisualVM中与JMX端口连接后,我们将看到类似的东西
有 Monitor 的标签,螺纹, sampler , profiler 和更多扩展。通过使用这些,我们可以监视
- CPU用法
- 堆大小
- 线程及其状态
- 样本CPU和内存使用
- 分析
- 检查平台和JVM和应用程序的自定义MBEAN
- 可视化GC 的VisualGC
在这里,我们可以看到IntelliJIDE的内存和CPU使用。
在下一部分将尝试讨论JMX
的代理水平