启用 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 个额外的随机监听端口的主要内容,如果未能解决你的问题,请参考以下文章