将 Windows 上的 JConsole 与 Linux 上的远程 Java Springboot 应用连接时连接失败

Connection failed while connecting JConsole on Windows with remote Java Springboot app on Linux

我正在我的 RHEL 服务器上启动 Java SpringBoot 应用程序,该服务器安装了 java 1.8,使用以下命令:-

java -jar App.jar --spring.profiles.active=dev -Xms96m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:loggc.log 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=5901
-Dcom.sun.management.jmxremote.rmi.port=5901
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Djava.rmi.server.hostname=localhost

当 jar 成功启动时,一个 PID 已被分配,我想监控堆利用率的 PID。所以我试图通过 在 windows 环境 上使用 JConsole 并使用端口转发将 Linux 上的 JMX 端口与 windows 上的端口绑定来实现这一点使用腻子。

但是由于 JRMP 连接失败,我无法成功连接。

有一天可以让我深入了解我可能做错了什么,或者是否有更好的方法来分析 Linux 环境中的堆利用率。

我试图通过 jconsole 5901 访问它,但它说远程端点上有非 JRMP 服务器。

参数顺序错误。这些参数在您的 main 方法中作为 args 可用,但 Java 运行时不关心它们。

java -h
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

如果顺序正确,Java 运行时将获取参数而不是您的应用程序。

java -Xms96m -Xmx128m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:loggc.log 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=5901
-Dcom.sun.management.jmxremote.rmi.port=5901
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Djava.rmi.server.hostname=localhost
-jar App.jar --spring.profiles.active=dev