很抱歉这个问题必须被问过很多次,但我无法成功解决我的问题。我已经阅读了很多博客、网站、论坛……但在我的情况下没有找到任何解决方案。
案例: 我需要将我盒子上的 VisualVM 连接到远程服务器(tomcats、weblogics)以进行性能/线程/内存监控。这些服务器安装在受防火墙保护的(物理或虚拟)机器上。防火墙中开放了大间隔的端口并且可以使用,但不是所有端口。
测试
- 我已经尝试通过 VisualVM 中的 JMX 直接连接,在服务器启动时在服务器端使用以下 JVM 选项:
-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 似乎总是在寻找未知的服务器。
尝试在服务器端从我的盒子可访问的端口(-p 选项)上启动 jstatd(此端口上的 telnet 有效),但是当使用 jstatd 端口在此主机上启动 visualVM 时,它似乎仍在等待无法访问的东西...... . 与 jps 连接到此远程主机的行为相同。
尝试在网络保护较少的服务器上使用相同的工具,它可以工作。所以我已经看到了我的盒子和服务器之间的连接,它们是在与我指定给 jstatd 的端口不同的端口上完成的。我知道第一次通信(握手)需要这个端口,真正的通信是在其他端口上完成的,但不可预测(例如:60305、55197,...)。不确定我是否非常了解 RMI 的工作原理。
请帮帮我,我快疯了!