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

我在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启用的Java应用程序似乎在JMX客户端连接时打开一个随机的高阶端口

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

如何配置这些端口?

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

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

您可以使用Tomcat的JMX远程生命周期监听器 ,它允许修复JMX / RMI服务器使用的端口。
JMX Remote Lifecycle Listener允许配置以下端口:

  • rmiRegistryPortPlatform – JMX / RMI注册表用于Platform MBean的端口。 应该使用此方法而不是com.sun.management.jmxremote.port系统属性
  • rmiServerPortPlatform – Platform JMX / RMI服务器使用的端口。

在附加中,您可以配置useLocalPorts属性 – 是否应强制使用这些端口的任何客户端使用本地端口连接到JMX / RMI服务器。

请注意,此侦听器需要将catalina-jmx-remote.jar放在$CATALINA_HOME/lib 。 这个jar可以在二进制下载区的extras目录中找到。