JMX使用入门

简述

本文是关于JMX(Java Management Extensions)的使用文档。

 

 

关于JMX

所谓JMX,是Java Management Extensions(Java管理扩展)的缩写,是一个为应用程序植入管理功能的框架。JMX有以下用途:

  1. 监控应用程序的运行状态和相关统计信息。
  2. 修改应用程序的配置(无需重启)。
  3. 状态变化或出错时通知处理。

举个例子,我们可以通过jconsole监控应用程序的堆内存使用量、线程数、类数,查看某些配置信息,甚至可以动态地修改配置。另外,有时还可以利用JMX来进行测试。

 

JMX的基础架构

具体的架构分层如下图:

 

 

 

 

各层次的简单描述如下表:

层次

描述

Instrumentation

主要包括了一系列的接口定义和描述如何开发MBean的规范。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。

Agent

用来管理相应的资源,并且为远端用户提供访问的接口。该层的核心是MBeanServer,所有的MBean都要向它注册,才能被管理。注册在MBeanServer上的MBean并不直接和远程应用程序进行通信,他们通过协议适配器(Adapter)和连接器(Connector)进行通信。

Distributed

定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述。注意,Adapter 和Connector的区别在于:Adapter是使用某种Internet协议来与 Agent获得联系,Agent端会有一个对象 (Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector则是使用类似RPC的方式来访问Agent,在Agent端和客户端都必须有这样一个对象来处理相应的请求与应答。比如RMI Connector。

 

 

 

JMX的使用

需求

1. 测试本地连接管理MBean。

2. 测试远程连接管理MBean,包括代码实现、启动参数、启动参数+配置文件等方式。

3. 如何开启账号密码认证。

工程环境

JDK:1.8.0_181

Maven: 3.5.4

Ide: Intellij idea 2020.3.2

主要步骤

1. 定义MBean接口,并编写实现类;

2. 注册MBean到MBeanServer;

3. 启动程序;

4. 使用jconsole连接管理该程序。

编写MBean接口

 

编写实现类

 

 

本地连接

注册MBean

类名HelloAgent。只有将MBean注册到MBeanServer,MBean才能被管理。MBean的对象名格式为:域名:type=MBean类型,name=MBean名称。其中,域名和MBean名称可以随便取,对象名中除了type,我们还可以自定义其他条目,以方便管理。

 

测试

启动程序,打开jconsole(在JDK安装路径的bin目录下),出现如下界面,这时可以看到我们测试的程序:

 

选择HelloAgent后,点击连接,这时如果弹窗“安全连接失败,是否以不安全的方式重试”,这是因为我们没有开启ssl加密,可以不去理会它。点击不安全的连接,即可进入以下页面:

 

通过这个窗口我们可以查看程序的堆内存使用量、线程、类等信息,我们再点击MBean选项卡,可以看到我们编写的MBean,我们定义的对象名为jmx:type=user,name=user001,其中jmx作为第一级目录,type=hello作为第二级目录,name=hello001对应具体的对象,它具备属性和操作。其中,hello的setter和getter方法被合并在了一起。

 

通过这个界面,我们可以查看和设置hello的属性,或调用它的方法。例如,我先设置name的值,通过程序控制台可以看到该方法被调用了:

 

接着再调用helloWorld方法

 

通过以上例子,可以看到JMX除了查看类的属性外,我们还可以在不重启程序的情况下进行配置或执行某些方法。

以上是本地访问的例子,接下来介绍如何实现远程连接。

远程连接的连接方式有:

  1. 代码实现;
  2. 启动参数配置;
  3. 启动参数+文件配置。

远程连接方式一(代码实现)

在本地连接的基础上进行修改。

开启远程连接:

 

测试

打开jconsole,使用远程连接方式,输入我们设置好的ip和端口,点击连接即可:

 

远程连接方式二(启动参数)

在本地连接的基础上进行修改。在程序启动时加入以下启动参数,便可实现远程连接。

-Djava.rmi.server.hostname=<your-ip> // 你的ip

-Dcom.sun.management.jmxremote.port=<your-port> // 开放端口号

-Dcom.sun.management.jmxremote.local.only=false // 是否只能本地连接

-Dcom.sun.management.jmxremote.ssl=false // 是否使用ssl加密

-Dcom.sun.management.jmxremote.authenticate=false // 是否需要账号密码认证

在idea右上角处打开Edit Configurations窗口:

 

在VM option处填入以下启动参数:

 

远程连接方式三(启动参数+配置文件)

在本地连接的基础上进行修改。在程序启动时加入以下启动参数,并结合配置文件,便可实现远程连接。

-Dcom.sun.management.config.file=<your-url> // 配置文件路径

-Djava.rmi.server.hostname=<your-ip>

添加配置文件management.properties,填入以下参数:

 

设置账户密码

实际使用中,会采用安全加密的方式来监控程序,这时可以设置ssl加密或账号密码认证。这里介绍账号密码认证的流程。

启动参数配置:

-Dcom.sun.management.config.file=<your-url> // 配置文件路径

-Djava.rmi.server.hostname=<your-ip>

配置文件配置:

 

接下来配置好密码文件和权限文件:

 

 

密码文件:

 

权限文件:

 

测试

打开jconsole,选择远程连接,并输入账号密码,点击连接即可:

 

注意

jmxremote.access与jmxremote.password需要修改系统权限,步骤如下:

假如你的登录用户为:ziyue.huang,执行如下命令:

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只有秃子才能变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值