daz*_*ito 6 java ssh jmx glassfish jconsole
我的基础架构以这种方式构建(在AWS上):
|NAT| <--> |ServerA| <--> |DockerContainer| <--> |GlassFish4.0|
Run Code Online (Sandbox Code Playgroud)
ServerA有一个运行Glassfish 4.0版的Docker容器
ServerA通过NAT服务器访问Internet.
要连接到ServerA,我要通过SSH连接到NAT服务器,然后SSH到ServerA.
这个运行顺利,没有任何问题.
现在我需要将本地计算机上的JConsole连接到GlassFish服务器,这是我遇到问题并需要一些帮助的地方.
我将以下JVM选项添加到domain.xml文件中:
<jvm-options>-Dsun.management.jmxremote.level=FINEST</jvm-options>
<jvm-options>-Dsun.management.jmxremote.handlers=java.util.logging.ConsoleHandler</jvm-options>
<jvm-options>-Djava.util.logging.ConsoleHandler.level=FINEST</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.local.only=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.ssl=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.authenticate=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.port=9010</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.rmi.port=9010</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.host=0.0.0.0</jvm-options>
<jvm-options>-Djava.rmi.server.hostname=10.0.0.115</jvm-options>
Run Code Online (Sandbox Code Playgroud)
其中10.0.0.115(对于java.rmi.server.hostname)是ServerA的本地地址.
然后我创建一个从我的本地机器到NAT服务器的SSH隧道,如下所示:
ssh -L 9010:localhost:9010 nat
Run Code Online (Sandbox Code Playgroud)
然后我像这样建立另一个到ServerA的SSH隧道:
ssh -L 9010:localhost:9010 serverA
Run Code Online (Sandbox Code Playgroud)
在docker容器上,我在docker run上公开了端口9010,如下所示:
docker run --restart=always --name $CONTAINER_NAME \
-d \
-p 4848:4848 \
-p 8080:8080 \
-p 9010:9010 \
my container
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试连接JConsole时,我使用localhost:9010但失败了.
我试图telnet到localhost 9010,看起来它成功了:
telnet localhost 9010
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^C^C^C^C^C^C
^]
::
exit
^Z^Z^X^C^V^M
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
过了一段时间,我得到了 Connection closed by foreign host.
我尝试过使用VisualJM但是如果我输入localhost:9010 VisualJM认为它有"真正的"localhost并且不允许我添加远程服务器然后添加JMX.
我已经将安全组上的NAT和ServerA的所有流量打开到我自己的IP,但我没有成功,所以我认为它不是防火墙问题.
有人可以帮助我发现我在这里做错了什么吗?
编辑:
在我的本地计算机上使用jconsole -debug时,在尝试连接到docker JVM后,我得到以下异常:
java.lang.SecurityException: Expecting a javax.rmi.ssl.SslRMIClientSocketFactory RMI client socket factory in stub!
at javax.management.remote.rmi.RMIConnector.checkStub(RMIConnector.java:1903)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:295)
at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:355)
at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:294)
Run Code Online (Sandbox Code Playgroud)
编辑2
尝试从本地计算机连接到ServerA时运行netstat我得到此输出:
netstat -a | grep 9010
tcp 0 0 ip-XXX-XX-XX-X.us:34406 ip-XXX-XX-Y-YYY.us:9010 ESTABLISHED
tcp 0 0 localhost:54745 localhost:9010 ESTABLISHED
tcp6 0 0 [::]:9010 [::]:* LISTEN
tcp6 0 0 localhost:9010 localhost:54745 ESTABLISHED
Run Code Online (Sandbox Code Playgroud)
其中X在两种情况下都是相同的数字,而Y是不同的数字
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |