相关疑难解决方法(0)

JConsole通过ssh本地端口转发

我希望能够远程连接到暴露了JMX的Java服务,但是它被防火墙阻止了.我曾尝试使用ssh本地端口转发,但连接失败.看看wireshark,看来当你尝试连接jconsole时,它想要在连接到被防火墙阻止的端口9999之后通过一些短暂的端口连接.

有没有办法让jconsole只通过9999连接或使用代理?是这篇文章仍然是最好的解决办法?或者,我错过了什么?

java ssh jmx

59
推荐指数
4
解决办法
5万
查看次数

通过JMX访问在docker容器中运行的tomcat

我想通过JMX获得tomcat的表现.Tomcat版本为7,Java版本为1.7.0_79.

Tomcat在docker的容器上运行.端口映射已通过以下设置.

docker run -itd -p 18080:8080 -p 19998:19998 -p 62911:62911 sad_jang2 bash
Run Code Online (Sandbox Code Playgroud)

在tomcat容器中,在路径/ tomcat_home/bin /中创建了setevn.sh,其中包含以下内容.

export JAVA_OPTS="
-Xdebug -Xrunjdwp:transport=dt_socket,address=62911,server=y,suspend=n
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=19998
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.17.0.16"
Run Code Online (Sandbox Code Playgroud)

我写了一个简单的java代码

JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + "172.17.0.16"+ ":" + "19998" + "/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, null);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
Run Code Online (Sandbox Code Playgroud)

并且可以通过JMX获得相关值.

但是,我在我的桌面上使用docker主机的地址和19998端口运行此代码

JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + "10.70.1.5"+ ":" + "19998" + "/jmxrmi");
Run Code Online (Sandbox Code Playgroud)

控制台显示以下消息

java.rmi.ConnectException: Connection refused to host: 172.17.0.16; nested exception is: 
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) …
Run Code Online (Sandbox Code Playgroud)

java tomcat jmx docker

5
推荐指数
1
解决办法
6399
查看次数

标签 统计

java ×2

jmx ×2

docker ×1

ssh ×1

tomcat ×1