当使用Docker运行进程时,为什么连接到JMX端口(使用JConsole)如此困难。
当然我将JMX端口暴露给主机,甚至在运行Java进程时使用 Sun特定选项(遵循http://ptmccarthy.github.io/2014/07/24/remote-jmx-with-docker/的说明)。
我能够telnet到主机ip和暴露的JMX端口,它告诉它是可访问的。但我无法找到一种方法来使用JConsole并连接到容器中运行的JMX服务。
-Djava.rmi.server.hostname=$JMX_HOSTNAME
-Dcom.sun.management.jmxremote.port=$JMX_PORT
-Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT
答案 0 :(得分:0)
过去,两个港口必须不同。请尝试一下。
如果那不起作用:
Tomcat提供了一个额外的组件来设置所提到的第二个端口, JMX远程生命周期监听器。
请看一下:
http://tomcat.apache.org/tomcat-7.0-doc/extras.html
http://tomcat.apache.org/download-70.cgi
我在tomcat / lib目录中使用catalina-jmx-remote.jar这个设置来通过:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost
-DrmiRegistryPortPlatform=10381
-DrmiServerPortPlatform=10380
加上这些,但你不会在开发环境中需要它们。
-Dcom.sun.management.jmxremote.password.file=/home/tomcat/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/home/tomcat/jmxremote.access
-Dcom.sun.management.jmxremote.authenticate=true
答案 1 :(得分:0)
您目前的看法是正确的。为了至少尝试让它工作,我尝试禁用auth& SSL。然后,一旦你开始工作,考虑重新启用你需要的任何安全性:
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
答案 2 :(得分:-1)
实际上,您需要这两个端口不同。一个端口用于RMI注册表,另一个端口用于远程协议。
从jconsole / visualvm指定连接服务器的URL时,请使用服务器端“-Dcom.sun.management.jmxremote.port”中设置的端口。