当 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 应用程序