启用 JMX 的 Tomcat7 打开 2 个额外的随机监听端口

Posted

技术标签:

【中文标题】启用 JMX 的 Tomcat7 打开 2 个额外的随机监听端口【英文标题】:Tomcat7 with enabled JMX opens 2 additional random listening ports 【发布时间】:2014-01-09 01:07:35 【问题描述】:

我在 Centos6 上使用 JDK7 运行 Tomcat7。 我使用以下选项启用 JMX:

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true"

不幸的是,当我检查打开了哪些端口时,我发现了另外 2 个随机端口:

netstat -plunt | grep java
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 :::60555                            :::*                LISTEN      22752/java
tcp        0      0 ::ffff:127.0.0.1:8080               :::*                LISTEN      22752/java
tcp        0      0 :::9123                             :::*                LISTEN      22752/java
tcp        0      0 :::40867                            :::*                LISTEN      22752/java

我猜JMX应该多开一个端口JMX enabled Java application appears to open a random high order port when JMX client connects

为什么 Tomcat 中的 JMX 会额外打开 2 个端口?

如何配置这些端口?

如果我配置-Dcom.sun.management.jmxremote.local.only=true 意味着其他端口也可以仅使用本地访问来访问?

如何配置::ffff:127.0.0.1会出现在JMX打开的所有端口之前?

【问题讨论】:

【参考方案1】:

您可以使用 Tomcat 的 JMX Remote Lifecycle Listener,它允许修复 JMX/RMI 服务器使用的端口。 JMX Remote Lifecycle Listener 允许配置以下端口:

rmiRegistryPortPlatform - JMX/RMI 注册表使用的端口 对于平台 MBean。应该使用这个来代替com.sun.management.jmxremote.port 系统属性 rmiServerPortPlatform - 要使用的端口 由平台 JMX/RMI 服务器提供。

此外,您还可以配置useLocalPorts 属性 - 如果任何使用这些端口的客户端被强制使用本地端口连接到 JMX/RMI 服务器。 请注意,此侦听器需要将catalina-jmx-remote.jar 放置在$CATALINA_HOME/lib 中。这个jar可以在二进制下载区的extras目录中找到。

【讨论】:

感谢您的帮助!我成功配置了监听器,但是......它添加了 2 个额外的端口。现在我打开了 5 个端口(当我使用 useLocalPorts 时,没有一个端口使用 ::ffff:127.0.0.1)。是Tomcat的错误吗?端口列表:tcp 0 0 ::ffff:127.0.0.1:8080 :::* tcp 0 0 :::10001 :::* tcp 0 0 :::10002 :::* tcp 0 0 :::34075 :::* tcp 0 0 :::52288 :::* tcp 0 0 :::9123 :::* 可以设置rmiBindAddress的值为127.0.0.1 谢谢,它会影响在 JmxRemoteLifecycleListener 中配置的两个端口。无论如何,它不会影响额外的随机端口,我不明白它们为什么被打开(顺便说一句,你可以看到它们是随机的 - 查看所有列表)。是Tomcat的错误吗?端口列表:tcp 0 0 :::40973 tcp 0 0 :::32814 tcp 0 0 ::ffff:127.0.0.1:8080 tcp 0 0 ::ffff:127.0.0.1:10001 tcp 0 0 ::ffff:127.0.0.1:10002 tcp 0 0 :::9123 不确定这是否是 Tomcat 问题。如果您完全禁用 JMX,您是否看到 JVM 没有监听这些随机端口?顺便说一句,9123 端口似乎在重复自己 当我注释掉上面问题中列出的 JmxRemoteLifecycleListener 和 JMX 设置时,我只有一个端口:tcp 0 0 ::ffff:127.0.0.1:8080 :::*

以上是关于启用 JMX 的 Tomcat7 打开 2 个额外的随机监听端口的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Server 2016 中运行的 Wildfly 中启用 JMX

windows下Tomcat添加jmx监控

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

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

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

使用 Spring Boot 重新打包启用 JMX