使用 Java Mission Profiler 监控远程 JVM

Monitor remote JVM with Java Mission Profiler

我在 Ubuntu 服务器 (14.04.1 LTS) 上从 Java Mission Control 运行 在 OSX 10.10.2[=16= 上访问 JVM 时遇到问题]

我读过这个问题: 但它对我没有帮助。

我尝试通过互联网访问服务器,并在路由器上为 TCP 和 UDP 端口 7091 启用了端口转发,指向服务器的本地接口。这个端口转发适用于其他服务,所以我很确定这部分没有问题。

Java 服务器上的版本是:

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

我这样在服务器上启动 JVM:

java -Xms2048M -Xmx4096M 
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=7091 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.registry.ssl=false 
com.example.MyServer 
-arg1 XXX
-arg2 YYY
-arg3 ZZZ

(我玩过很多不同的 -Dcom.sun.management... 参数,这是最新的尝试)

在 OSX 我的 java 版本是:

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

任务控制版本为 5.3.0

我愿意

File - Connect - Create a new connection
enter Host: DNS name of remote router <I know this is correct>
Port: 7091

当我执行 "Test Connection" 时出现错误超时。

(我已经在服务器上打开端口 7091 使用:"sudo ufw allow 7091"。我需要打开任何其他端口吗?)

如何进行???

设置 -Djava.rmi.server.hostname=

可能会有所帮助

您不需要明确设置 -Dcom.sun.management.jmxremote.rmi.port=7091,它应该默认与 com.sun.management.jmxremote.port 相同,但只是为了确保您也可以设置它...

我终于找到了正确的配置:

$javabin -Xms2048M -Xmx4096M $GCLOG \
 -XX:+UnlockCommercialFeatures   \
 -XX:+FlightRecorder  \
 -Djava.rmi.server.hostname=myhost.example.com \
 -Dcom.sun.management.jmxremote=true \
 -Dcom.sun.management.jmxremote.port=7091 \
 -Dcom.sun.management.jmxremote.rmi.port=7091 \
 -Dcom.sun.management.jmxremote.authenticate=false \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Djava.net.preferIPv4Stack=true \
  com.example.MyServer -arg1 XXX -arg2 YYY -arg3 ZZZ

重要的部分是 java.rmi.server.hostname=myhost.example.com 部分,其中 myhost.example.com 必须解析为路由器的外部接口。

另外,

-Dcom.sun.management.jmxremote.port=7091 \
-Dcom.sun.management.jmxremote.rmi.port=7091 \

..我只需要转发路由器中的那个端口。

我不确定 preferIPv4 是否重要,但现在我不在乎,它有效!!!