我正在使用以下命令在装有Java 1.8 的 RHEL服务器上启动Java SpringBoot应用程序:-
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
罐子成功启动后,已分配一个 PID ,我想监视用于堆利用的PID 。因此,我试图通过在Windows环境下使用JConsole 并通过使用Putty使用端口转发将Linux上的JMX端口与Windows上的端口绑定来实现这一目标。
但是由于JRMP连接失败,我无法成功连接。
有一天可以让我了解我可能做错了什么,或者是否有更好的方法来分析Linux环境中的堆利用率。
我尝试通过以下方式访问它:jconsole 5901,但它在远程端点上显示了非JRMP服务器。
答案 0 :(得分:1)
参数顺序错误。这些参数在您的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