使用Java Mission Profiler监视远程JVM

时间:2015-03-24 18:07:29

标签: java macos jvm jmx

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

我读过这个问题:How to use Java Mission Control to monitor a JVM in a remote server?并没有帮助我。

我尝试通过互联网访问服务器,并在路由器上为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)

Mission Control是版本5.3.0

我做

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

当我做&#34;测试连接&#34;它超时错误。

(我已经在服务器上打开了端口7091:&#34; sudo ufw允许7091&#34;。我是否需要打开任何其他端口?)

如何进行???

2 个答案:

答案 0 :(得分:0)

设置-Djava.rmi.server.hostname =

可能会有所帮助

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

答案 1 :(得分:0)

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

$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是否重要,但是现在我不在乎,它有效!