前言
服务器上跑了一个springboot项目,尝试开启jmx远程监控,观察下jvm的情况。按照网上的一些文章去添加了参数,发现无法连接远程jmx,如下所示
经过一番排查,终于解决问题。
服务器端jar包启动命令示例
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=www.sample.com\
-Dcom.sun.management.jmxremote.port=9901 \
-Dcom.sun.management.jmxremote.rmi.port=9902 \
-jar /app/boot-app-1.0.jar
java -jar boot-app.jar , 这命令大家应该很熟悉!
中间-D参数是开启jmx的参数
重点关注的参数:
-Djava.rmi.server.hostname - 填写主机域名或ip
-Dcom.sun.management.jmxremote.port - jmx端口(添加jmx连接时使用)
-Dcom.sun.management.jmxremote.rmi.port - rmi端口
很多博文,都漏了hostname、rmi.port参数
遇到的问题
-
jmx参数缺失
jmxremote.rmi.port、java.rmi.server.hostname
网上很多文章都是抄来抄去。我也是copy过来的参数(少了上面两个参数),然后在服务器上跑,结果就是怎么都连不上。
花了很多时间排查,才发现少了上面两个参数。
经过测试,这三个参数都需要设置,才能连上 -
防火墙问题
这个问题比较好发现,云服务器一般有安全组,添加规则,开放jmx的端口就噢了。
最后
事实证明,还是得多手动去实践~