Java-JMX (官方文档解读)

JMX 简介

        JMX(Java Management Extensions)是Java平台的一个标准管理框架,自Java 1.5版本起成为Java 平台标准版 (Java SE 平台) 的标准组成部分。JMX 技术提供了一种简单、标准的方法来管理资源(例如应用程序、设备和服务)。由于 JMX 技术是动态的,因此您可以在创建、安装和实施资源时使用它来监视和管理资源。您还可以使用 JMX 技术来监视和管理 Java 虚拟机 (Java VM)。JMX 规范定义了 Java 编程语言中用于应用程序和网络管理和监控的架构、设计模式、API 和服务。

        使用 JMX 技术,给定资源由一个或多个 Java 对象(称为托管 BeanMBean)进行检测。这些 MBean 在核心管理对象服务器(称为MBean 服务器)中注册。MBean 服务器充当管理代理,可以在大多数已启用 Java 编程语言的设备上运行。规范定义了 JMX 代理,您可以使用它来管理已正确配置的任何资源。JMX 代理由一个 MBean 服务器(其中注册了 MBean)和一组用于处理 MBean 的服务组成。这样,JMX 代理就可以直接控制资源并使其可供远程管理应用程序使用。

为什么要使用 JMX 技术?

        JMX 技术为开发人员提供了一种灵活的方法来处理基于 Java 技术的应用程序(Java 应用程序)、创建智能代理、实现分布式管理中间件和管理器,并将这些解决方案顺利地集成到现有的管理和监控系统中。

  • JMX 技术降低了Java 应用程序的管理成本:基于 JMX 技术的代理(JMX 代理)可以在大多数支持 Java 技术的设备上运行。因此,Java 应用程序可以变得易于管理,而对其设计几乎没有影响。Java 应用程序只需嵌入托管对象服务器,并将其部分功能作为在对象服务器中注册的一个或多个托管 bean(MBean)提供即可。这就是从管理基础架构中获益所需的全部内容。
  • JMX技术提供了一种管理Java应用程序、系统和网络的标准方法:例如,Java Platform, Enterprise Edition (Java EE) 5应用服务器符合JMX架构,因此可以使用JMX技术进行管理。
  • JMX 技术可用于对 Java VM 进行开箱即用的管理:Java虚拟机 (Java VM) 使用 JMX 技术进行高度仪表化。您可以启动 JMX 代理来访问内置的 Java VM 仪表化,从而远程监控和管理 Java VM。
  • JMX 技术提供了一种可扩展的动态管理架构:每个 JMX 代理服务都是一个独立的模块,可以根据需求插入到管理代理中。这种基于组件的方法意味着 JMX 解决方案可以从小型设备扩展到大型电信交换机甚至更远。JMX 规范提供了一组核心代理服务。可以在管理基础架构中开发和动态加载、卸载或更新其他服务。
  • JMX 技术利用了现有的标准 Java 技术:在需要时,JMX 规范会引用现有的 Java 规范,例如 Java 命名和目录接口 (JNDI) API。
  • 基于 JMX 技术的应用程序(JMX 应用程序)可以通过 NetBeans IDE 模块创建:您可以从 NetBeans 更新中心(在 NetBeans 界面中选择“工具”->“更新中心”)获取一个模块,该模块允许您使用 NetBeans IDE 创建 JMX 应用程序。这降低了开发 JMX 应用程序的成本。
  • JMX 技术与现有管理解决方案和新兴技术相集成:JMXAPI 是任何管理系统供应商都可以实现的开放接口。JMX 解决方案可以使用查找和发现服务和协议,例如 Jini 网络技术和服务定位协议 (SLP)。

JMX的使用

  1. 创建MBeanServer:MBeanServer相当于管理MBean的容器。创建MBeanServer有两种方式:一是获取JVM中默认启动的MBeanServer,二是自己创建。
  2. 创建ObjectName:用于标识唯一的资源MBean,格式为:“域名:name=MBean名称”。
  3. 绑定MBean与对应的ObjectName并注册到MBeanServer:至此即可通过JConsole管理本地的MBean的相关信息。同时,也可以提供其他的连接方式,如rmi连接方式。
  4. 注册监听端口号。
  5. 创建JMXServiceURL:格式为:service:jmx:rmi://localhost:0/jndi/rmi://localhost:1099/jmxrmi(完整版)JMXServiceURL格式说明。
  6. 通过JMX来管理和监控Java应用程序。例如,可以使用JConsole通过JMX查看Java程序的运行信息。这些信息包括内存情况、线程情况、类加载情况等。

JMX 架构

JMX 技术架构

        JMX 技术架构分为三部分:Instrumentation,Agent,Remote Management。

Instrumentation

        要使用 JMX 技术管理资源,您必须首先使用 Java 编程语言对资源进行检测。您可以使用称为MBean的 Java 对象来实现对资源检测的访问。MBean 必须遵循 JMX 规范中定义的设计模式和接口。这样做可确保所有 MBean 都以标准化方式提供托管资源检测。除了标准 MBean 之外,JMX 规范还定义了一种称为MXBean的特殊类型的MBean。MXBean 是一种仅引用一组预定义数据类型的 MBean。还存在其他类型的 MBean,但本文将集中讨论标准 MBean 和 MXBean。

        一旦资源被 MBean 检测,就可以通过 JMX 代理对其进行管理。MBean 不需要了解它们将与之一起运行的 JMX 代理。

        MBean 的设计目标是灵活、简单且易于实现。应用程序、系统和网络的开发人员可以以标准方式管理其产品,而无需了解或投资复杂的管理系统。只需付出最少的努力即可管理现有资源。

        此外,JMX 规范的检测层还提供了一种通知机制。该机制使 MBean 能够生成通知事件并将其传播到其他层的组件。

Agent

        基于 JMX 技术的代理(JMX 代理)是一种标准管理代理,它直接控制资源并使其可供远程管理应用程序使用。JMX 代理通常与其控制的资源位于同一台机器上,但这种安排不是必需的。

        JMX 代理的核心组件是MBean 服务器,即注册 MBean 的托管对象服务器。JMX 代理还包括一组用于管理 MBean 的服务,以及至少一个允许管理应用程序访问的通信适配器或连接器。

        当您实现 JMX 代理时,您不需要知道它将管理的资源的语义或功能。事实上,JMX 代理甚至不需要知道它将为哪些资源提供服务,因为任何符合 JMX 规范的资源都可以使用任何提供该资源所需服务的 JMX 代理。同样,JMX 代理不需要知道将访问它的管理应用程序的功能。

Remote Management

        JMX 技术工具可通过多种不同方式访问,既可以通过现有管理协议(如简单网络管理协议 (SNMP))也可以通过专有协议。MBean 服务器依靠协议适配器和连接器使 JMX 代理可从代理的 Java 虚拟机 (Java VM) 之外的管理应用程序访问。

        每个适配器通过特定协议提供在 MBean 服务器中注册的所有 MBean 的视图。例如,HTML 适配器可以在浏览器中显示 MBean。

        连接器提供管理器端接口,用于处理管理器与 JMX 代理之间的通信。每个连接器通过不同的协议提供相同的远程管理接口。当远程管理应用程序使用此接口时,它可以通过网络透明地连接到 JMX 代理,而不管使用哪种协议。JMX 技术提供了一种基于 Java 远程方法调用 (Java RMI) 将 JMX 技术检测导出到远程应用程序的标准解决方案。

JMX 分层架构

        JMX 分层架构可以分为设备层,代理层、分布服务层。

  • 设备层:主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。
  • 代理层:主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。
  • 分布服务层:主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。

 JMX 组件架构即详解

        关于JMX 组件结构请参看我的另一篇文章:

        JMX 组件架构即详解-CSDN博客

Java 虚拟机的监控和管理

        JMX技术还可以用于监控和管理Java虚拟机(Java VM)。Java VM 具有内置工具,可让您使用 JMX 技术对其进行监视和管理。这些内置管理实用程序通常被称为Java VM 的现成管理工具。为了监视和管理 Java VM 的不同方面,Java VM 包含一个平台 MBean 服务器和特殊的 MXBean,供符合 JMX 规范的管理应用程序使用。

 JConsole

        Java SE 平台包含符合 JMX 规范的 JConsole 监控和管理工具。JConsole 使用 Java VM(平台 MXBeans)的广泛工具来提供有关在 Java 平台上运行的应用程序的性能和资源消耗的信息。

        由于 Java SE 平台内置了实现 JMX 技术的标准监控和管理实用程序,因此您无需编写任何 JMX API 代码即可看到现成的 JMX 技术的实际应用。只需启动 Java 应用程序,然后使用 JConsole 对其进行监控即可。

使用 JConsole 监控应用程序

        此过程显示如何监视 Notepad Java 应用程序。在 Java SE 平台版本 6 之前的版本中,要使用 JConsole 监视的应用程序需要使用以下选项启动。

-Dcom.sun.management.jmxremote

        但是,Java SE 6 平台提供的 JConsole 版本可以附加到任何支持 Attach API 的本地应用程序。换句话说,在 Java SE 6 HotSpot VM 中启动的任何应用程序都会被 JConsole 自动检测到,无需使用上述命令行选项启动。

  1. 在终端窗口中使用以下命令启动 Notepad Java 应用程序:
    java -jar 
         jdk_home /demo/jfc/Notepad/Notepad.jar
    

    Java 开发工具包 (JDK) 的安装目录在哪里jdk_home。如果您没有运行 Java SE 平台版本 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 选项卡。

    每个选项卡都提供了有关运行 Notepad 的 Java VM 的不同功能领域的更详细信息。所有显示的信息均来自本教程中提到的各种 JMX 技术 MXBean。所有平台 MXBean 均可显示在 MBean 选项卡中。本教程的下一部分将介绍 MBean 选项卡。

  5. 要关闭 JConsole,请选择“连接”->“退出”。

参考文献

官方文档 : https://docs.oracle.com/javase/tutorial/jmx/overview/index.html

【JMX】JAVA监控的基石-CSDN博客
JMX使用详解-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

沃丰科技智能客服在跨境电商独立站中的核心角色

随着全球化进程的加速和互联网技术的不断发展,跨境电商行业蓬勃兴起,为消费者提供了更广阔、更便捷的购物选择。在这样一个竞争激烈的市场环境中,优质的客户服务成为了企业脱颖而出的关键。沃丰科技智能客服凭借其先进的技术和人性化的设计理…

java 日期与时间

Java 的时间 API 是一个非常重要的主题,尤其是 Java 8 引入的 java.time 包,它为日期和时间处理提供了强大的功能。 我们可以按照以下几个主题逐步学习 Java 时间处理: import java.time.LocalDate; import java.time.LocalDateTim…

(ICML-2024)DoRA:权重分解低秩自适应

DoRA:权重分解低秩自适应 Paper是英伟达发表在ICML 2024的工作 Paper Title:DoRA: Weight-Decomposed Low-Rank Adaptation Code: 地址 Abstract 在广泛使用的参数高效微调 (PEFT) 方法中,LoRA 及其变体因避免了额外的推理成本而…

想在iPad上远程操作安卓手机的APP,怎样实现iPad远程控制安卓?

学生党或互联网行业的打工人,人手连三台电子设备也很常见,手机、平板还有笔记本电脑一大堆,如果出门要全带上,背包压力也变大。 有没有想过用远程控制功能,让iPad远程控制安卓手机?这样做,出门就…

【JavaEE】UDP、TCP的API介绍

目录 UDP数据报套接字编程 DatagramSocket API DatagramPacket API 回显C/S示例 TIPS TCP ServerSocket API Socket API 回显C/S示例 UDP数据报套接字编程 DatagramSocket API socket是操作系统中的一种概念,本质上是一种特殊的文件,socket属于…

【专题】2024年11月新能源汽车、智能汽车行业报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38520 随着科技的飞速发展与社会的持续变革,新能源汽车与智能汽车行业正步入全新的发展阶段,成为全球瞩目的焦点领域。本报告深入且全面地剖析了 2024 年 11 月该行业的多方面状况。从汽车消费市场来看&#…

mysql重置root密码(适用于5.7和8.0)

今天出一期重置mysql root密码的教程,适用于5.7和8.0,在网上搜索了很多的教程发现都没有效果,浪费了很多时间,尝试了多次之后发现这种方式是最稳妥的,那么废话不多说,往下看: 目录 第一步&…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

linux 系统常用指令

1、查看内核版本 uname -r 2、列出占用空间最大的 10 个文件或目录 du -ah / | sort -rh | head -n 10 终于找到我虚拟机硬盘空间越来越少的原因了,类目......

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义(隐藏) 静态成员函数友元函数 单继承与多继承概念赋值转换(切片)多继承带来的…

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…

ros项目dual_arm_pick-place(urdf文件可视化查看)

前言 一直想写一些项目的讲解,今天(2024.12.05)可以说正式开始了。 dual_arm_pick-place项目,是关于两个机械臂协同传递物品。 正文 这次的话,给大家讲一下里面的urdf文件。 这篇文章主要来看一下项目中的urdf文件…

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步,开发者们越来越重视提高生产力的特性。对于 Java 开发者来说,能够在不重启…

工业-实时数据采集

1.编写新的 Flume 配置文件,将数据备份到 HDFS 目录 /user/test/flumebackup 下,要求所有主题 的数据使用同一个 Flume配置文件完成。 1. 配置概览 Flume 的主要任务是从多个来源(如日志文件)读取数据,经过处理后通过接收器(Sink)存储到目标系统(如 HDFS)。在此配置…

springSecurity认证流程

Spring Security 是spring家族中的一个安全管理框架。相比于另一个安全框架Shiro,它提供更丰富的功能和社区资源,但也较难上手。所以一般大项目用spring Security,小项目用Shiro。 一般web应用需要认证和授权,这也是spring Secur…

LinuxUDP编程

由于UDP是无连接、尽力传输的,所以Server端绑定完IP、端口号后,使用recvfrom可以阻塞等待客户端的数据,而且Client端通过sendto发送的数据包直接发送到互联网(也是基于IP、端口号)这种操作是不担保Server端是否收到的&…

Nginx基本介绍及conf文件的作用

文章目录 前言一、Nginx基本介绍1.1 what is Nginx ?1.2 Nginx中的三个概念1.3 nginx安装1.4 运行nginx 二、nginx配置文件conf2.1 conf文件组成部分2.1.1 全局块2.1.2 events块2.1.3 http块 三、其他概念3.1 nginx惊群3.2 负载均衡 总结 前言 本文将介绍nginx的基…

Docker打包SpringBoot项目

一、项目打成jar包 在进行docker打包之前,先确定一下,项目能够正常的打成JAR包,并且启动之后能够正常的访问。这一步看似是可有可无,但是能避免后期的一些无厘头问题。 二、Dockerfile 项目打包成功之后,需要编写Doc…

GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册

文章目录 GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、GitLab安装配置2.1 安装GitLab所需的依赖包2.2 添加GitLab存储库2.2.1 将GitLab存储…

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …