【问题标题】:Monitor remote JVM with Java Mission Profiler使用 Java Mission Profiler 监控远程 JVM
【发布时间】:2015-05-28 04:35:04
【问题描述】:

我在从 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?,但对我没有帮助。

我尝试通过 Internet 访问服务器,并为路由器上的 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

当我执行“测试连接”时,它会因错误而超时。

(我在服务器上打开了7091端口,使用:“sudo ufw allow 7091”。我还需要打开其他端口吗?)

如何进行???

【问题讨论】:

    标签: java macos jvm jmx


    【解决方案1】:

    设置 -Djava.rmi.server.hostname= 可能会有所帮助

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

    【讨论】:

    • 我已经尝试添加-Djava.rmi.server.hostname=192.168.0.100。我还确保主机名 -I 返回 192.168.0.100,主机名 -i 返回 127.0.0.1 192.168.0.100,主机名 -f 返回 alpha-srv-01。还是不行。
    • 原来你是正确的(在某种程度上)但是关键部分是它必须是路由器的外部接口,而不是服务器的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2015-04-30
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多