我正在我的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并使用putty使用Port Forward将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