使用JConsole连接远程JMX示例

远程JMX连接的过程与本地JMX连接完全不同。您可以通过4种方法进行JConsole远程监视

  1. SSL 和身份验证均已禁用。
  2. 已启用SSL和已禁用身份验证。
  3. 启用身份验证,并禁用SSL。
  4. SSL和身份验证均已启用。

每种远程连接方式都有其自身的优点和缺点。您可以根据连接的难易程度和连接的安全性来选择适当的方式。在本教程中,我们将研究所有 4种不同类型的JMX远程连接示例,以及每种示例的优缺点。在后续教程中,我们还将学习如何将JConsole连接到Tomcat,JBoss等。

什么是JMX RMI端口,并且有任何默认端口吗?

JMX RMI端口是您要监视的Java进程侦听来自客户端(远程管理应用程序)(例如JConsole)的传入连接的端口号。为了监视本地Java进程,无需指定JMX RMI端口号。但是,为了监视远程进程,您需要为Java应用程序分配一个RMI端口号。

没有默认JMX端口号,由于安全等原因。如果在不提供JMX RMI端口号的情况下启动应用程序,则将无法建立远程连接,因为没有端口号,JMX代理无法 在主机JVM中启动RMI连接器

如何定义JMX端口号?

您必须通过设置系统属性“ com.sun.management.jmxremote.port”来定义JMX端口号 。 注意不要分配已经使用的TCP端口。如果尝试使用已经使用的端口,则Java应用程序将在启动时失败并抛出ExportException。出于开发目的,您可以选择49152-65535之间的任何端口,因为与保留端口相比,这些端口更安全。

对于生产环境,请小心拾取49152-65535之间的端口。操作系统可以根据它们的可用性将这些端口动态分配给正在运行的程序。如果您的应用程序停止了一段时间,同时操作系统将JMX端口号分配给了其他服务。您的应用程序将根本无法启动,直到客户端更改端口号或正在使用该端口的当前应用程序释放该端口为止。

 

JConsole –无需身份验证和SSL即可连接到远程JMX代理。

这是 建立远程JMX连接的最简单方法, 但也是 最不安全的方法。在开发阶段或通过专用网络监视应用程序时,应使用这种类型的连接。您需要设置以下4个属性来建立远程JMX连接。

1.  com.sun.management.jmxremote.ssl –默认值为true,这将启用客户端与JMX代理之间的安全套接字层(SSL)通信。在此示例中,我们将值设置为false以禁用SSL。

2. com.sun.management.jmxremote.authenticate –默认值为true,启用使用用户名和密码的身份验证。对于此示例,我们将其设置为false

3.  com.sun.management.jmxremote.port –如上所述,此属性用于设置用于通信的JMX RMI端口。

4.  java.rmi.server.hostname-运行Java应用程序的主机 的IP地址。该默认值是本地主机的IP地址。如果只有一个网络接口,则无需设置此属性。但是,如果您有多个活动的网络适配器。然后,您必须指定此值,因为Java程序可以选择任何一个网络适配器的IP地址。

启动Java应用程序。

我们将创建一个非常简单的Java程序,并尝试从远程计算机连接它。启动时的主线程将休眠10分钟。

https://gist.github.com/db39365ff75c7e73cfeeca1383f52245

对于Eclipse IDE,我们将在运行配置->参数-> VM参数中添加以下参数。

 

“ -Dcom.sun.management.jmxremote.port = <端口号>  -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false  -Djava.rmi.server.hostname = <主机的IP添加>”并运行程序。

 

用于从命令行运行程序。

java -Dcom.sun.management.jmxremote.port = <端口号>  -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false  -Djava.rmi.server.hostname = <主机的IP添加>完全限定的类名

运行应用程序以支持远程JConsole连接的命令行选项。

 启动JConsole。

在远程计算机上打开JConsole。选择远程进程单选按钮。按照以下格式输入主机的IP地址和JMX端口。<IP-添加>:<端口号>

 

由于在此远程连接示例中未使用身份验证,因此您可以将这两个字段保留为空。

 

当我们使用系统属性禁用SSL协议时,我们将收到上述警告“安全连接失败。不安全地尝试”。单击不安全建立连接。

 

最后,我们使用远程计算机连接到主机。

JConsole –通过身份验证连接到远程JMX代理。

 

此方法比不使用任何密码验证更安全。密码以明文形式存储在运行应用程序的主机上。由于未使用安全套接字层(SSL),因此入侵者可以侦听服务器和客户端之间的非加密通信并获取用户名和密码。不建议在生产环境中使用。

要启用身份验证,您需要创建访问和密码文件。在访问文件包含用户名角色分配给该用户。这两个角色是只读读/写角色。这些读取和读取/写入角色与可以在MBean上执行的操作有关。使用只读角色,您只能在MBean的属性上调用getter方法。但是具有读/写角色,您可以对属性执行设置操作或调用MBean接口定义的操作。该密码文件包含用户名和密码。

jmxremote.access

  管理员读
  来宾只读

格式: 用户名“ <空白>角色”。

jmxremote.password

  管理员密码1
  访客密码2

格式: 用户名<空白>密码“。

下一步是将密码文件限制为对当前用户或启动要监视的JVM的用户具有只读权限。如果当前用户没有读取权限,则在应用程序启动时会出现以下错误-“错误:必须限制密码文件的读取访问权限”

Windows用户可以按照以下步骤操作。

  cacls jmxremote.password / P“用户名”:R

在双引号中插入当前用户的用户名。“ R”表示提到的用户名将获得对该文件的只读权限。如果您不知道用户名,则可以使用“ whoami”命令找到它,如下所示。

 

Linux用户可以使用以下命令。

启动Java应用程序。

要定义访问路径和密码文件,我们必须设置这两个属性“ com.sun.management.jmxremote.access.file ”和“ com.sun.management.jmxremote.password.file ”。这些文件的默认位置是“ JDK Path \ jre \ lib \ management \ jmxremote.password”和“ JDK Path \ jre \ lib \ management \ jmxremote.access”。如果未指定上述属性,则应用程序将在默认路径下查找这些文件。

对于Eclipse,将以下内容添加到VM属性中以通过身份验证运行JConsole。

 

“ -Dcom.sun.management.jmxremote.port = <端口号>  -Dcom.sun.management.jmxremote.ssl = false  -Djava.rmi.server.hostname = <主机的IP添加> -Dcom.sun。 management.jmxremote.access.file = <访问文件路径> -Dcom.sun.management.jmxremote.password.file = <密码文件路径> ”

要使用命令行运行应用程序,请使用以下命令。

java  -Dcom.sun.management.jmxremote.port = <端口号>  -Dcom.sun.management.jmxremote.ssl = false  -Djava.rmi.server.hostname = <主机的IP添加> -Dcom.sun。 management.jmxremote.access.file = <访问文件路径> -Dcom.sun.management.jmxremote.password.file = <密码文件路径> 完全合格的类名。

 

启动JConsole。

输入远程主机的IP地址和端口。在访问文件中,我们指定了两个不同的用户,每个用户具有不同的角色。我们将使用“ guest”用户名和“ password2”作为密码。

 

由于我们仅使用身份验证而不使用SSL,因此在单击“连接”后,我们将再次收到“不安全连接”警告。

 

当我们使用来宾用户名登录时,我们无法在任何资源上执行任何写操作(设置或调用)。如果尝试调用写操作,则会得到Security Exception。但是,使用 管理员凭据,我们可以成功执行这些写操作。

原文地址:https://blog.csdn.net/allway2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340