当 JMX 客户端连接时,启用 JMX 的 Java 应用程序似乎打开了一个随机的高阶端口

Posted

技术标签:

【中文标题】当 JMX 客户端连接时,启用 JMX 的 Java 应用程序似乎打开了一个随机的高阶端口【英文标题】:JMX enabled Java application appears to open a random high order port when JMX client connects 【发布时间】:2011-11-02 01:16:30 【问题描述】:

启用 JMX 的 Java 应用程序在 JMX 客户端连接时似乎打开了一个随机的高位端口

我已经成功配置了一个支持 helloworld JMX 的程序,我可以使用 jconsole JMX 客户端从远程位置连接到它。

当我尝试打开 iptables 时,我注意到客户端登录时会建立一个随机高阶端口。最终我想监控防火墙隔离网段中的 Java 应用程序。我们可以控制随机端口打开的范围吗?

如果有建议,我会将这个问题移至 serverfault.com。

【问题讨论】:

端口是建立在客户端还是服务器上?如果在客户端我想它是绑定到服务器端口的客户端端口...... 您提出的有趣问题。 JMX 客户端通过服务器定义的端口连接到 JMX 服务器。发生这种情况后,另一个(随机?)端口打开并用于通信。 那么这个端口是在客户端还是在服务器上? 此随机端口在托管启用 JMX 的应用程序(服务器)的服务器上打开 【参考方案1】:

从 Java 7u25 开始,可以使用系统属性更改 RMI 端口:

-Dcom.sun.management.jmxremote.rmi.port=1234

详情请见this answer。

【讨论】:

【参考方案2】:

可以控制 RMI 使用的端口。见:http://olegz.wordpress.com/2009/03/23/jmx-connectivity-through-the-firewall/

这需要代码和命令行参数。我不知道没有代码可以做到这一点(尽管代码显然可以打包在不同的 jar 中)。

【讨论】:

我发现这篇博文也很有帮助blogs.oracle.com/jmxetc/entry/…【参考方案3】:

随机第三端口似乎是预期行为https://bugs.openjdk.java.net/browse/JDK-8035404

【讨论】:

【参考方案4】:

顺便说一句,这第三个临时端口也可以控制 - https://www.paybackblog.de/java-jmx-how-to-finally-control-your-ports/

【讨论】:

【参考方案5】:

解决方法是将 RMI 端口设置为与 JMX 端口相同;那么只需要在防火墙上打开一个端口。

例如:

-Dcom.sun.management.jmxremote.port=8989
-Dcom.sun.management.jmxremote.rmi.port=8989

见Why Java opens 3 ports when JMX is configured?

【讨论】:

以上是关于当 JMX 客户端连接时,启用 JMX 的 Java 应用程序似乎打开了一个随机的高阶端口的主要内容,如果未能解决你的问题,请参考以下文章

允许在立即启用 JMX 监控的情况下重新启动 Java 应用程序

194 - JMX的基本介绍和属性说明

194 - JMX的基本介绍和属性说明

194 - JMX的基本介绍和属性说明

Wildfly 17 在同一服务器上启用 JMX 远程会导致 logmanager 错误

使用 Spring Boot 重新打包启用 JMX