很抱歉这个问题必须多次提出,但我无法成功解决我的问题。 我已经阅读了很多博客,网站,论坛......并且在我的案例中找不到任何解决方案。
案例 我需要将我的盒子上的VisualVM连接到远程服务器(tomcats,weblogics)以进行性能/线程/内存监控。 这些服务器安装在受防火墙保护的(物理或虚拟)计算机上。 防火墙中打开了大间隔的端口,可以使用,但不是所有端口。
测试
-Djava.rmi.server.hostname=[hostname]
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[port]
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
我已经预先设置了主机名,因为从我的网络中,服务器的主机名和IP地址与远程服务器网络中的主机名和IP地址不同。
没有成功,VisualVM似乎总是在寻找未知的服务器。
尝试在服务器端启动jstatd,从我的框中可访问端口(-p选项)(此端口上的telnet工作),但是当使用jstatd端口在此主机上启动visualVM时,它似乎仍在等待对于无法访问的内容....与jps连接到此远程主机的行为相同。
尝试在网络保护较少的服务器上使用相同的工具,并且可以正常工作。所以我看到了我的盒子和服务器之间的连接,它们是在不同于我指定的jstatd的端口上完成的。 据我所知,第一次通信需要这个端口(握手类型),真正的通信是在其他端口上完成的,但不可预测(例如:60305,55197,...)。 我不确定我是否理解RMI的工作原理。
请帮帮我,我疯了!
答案 0 :(得分:7)
不幸的是,JMX尝试打开您配置的端口以外的端口。就在昨天,我成功通过JMX连接到防火墙后面的tomcat。两个棘手的部分是:
在jmxremote.access
中放置一个名为CATALINA_HOME/conf
的文件,其中包含以下行:
monitorRole readonly
controlRole readwrite
在server.xml
中通过特殊的tomcat监听器(/ lib中需要catalina-jmx-remote.jar)设置jmx将使用的端口:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="9009" rmiServerPortPlatform="9010" />
然后在防火墙上打开这两个端口。有用。但这只是为了tomcat。
另一种选择是使用ssh tunnelling。简而言之 - 您通过SSH连接并将其配置为将一些本地端口(运行jmx客户端的位置)转发到隧道另一侧的某些端口。
参考文献:
答案 1 :(得分:1)
以下是执行此操作的步骤:
mvn exec:java -Djava.rmi.server.hostname=[remote_host_name] -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
(用于&#34; jstatd&#34;类型连接)-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1102 -Dcom.sun.management.jmxremote.rmi.port=1102 -Djava.rmi.server.hostname=[remote_host_name]
(用于&#34; JMX&#34;类型连接)(此处仅需要java.rmi.server.hostname
因为网络中的IP和主机名与服务器的观点不同))1099
,1100
,1101
和1102
1099
,则可以在&#34;高级设置&#34;中更改此内容。)[remote_host_name]:1102
&#34; in&#34; Connection&#34;输入,并检查&#34;不要求SSL连接&#34; 免责声明:我是开源ejstatd工具的作者。
答案 2 :(得分:0)
在[主机名]上,仅为您的IP打开[端口]和tcp端口范围40000-60000。 这对我来说相当不错。