史上最全JMX遠程連接失敗問題踩坑和總結,涉及多種環(huán)境:本地、局域網測試環(huán)境、線上生產環(huán)境。
這里不介紹VisualVM的基本教程,那些隨便搜一下都有,主要介紹一下博主在不同環(huán)境使用,自己遇到的坑。
想要查看和監(jiān)控JVM運行情況,VisualVM是一種不錯的選擇。
VisualVM遠程連接JVM,最方便的方法是通過?jmx,即在jvm啟動參數(shù)增加jmx配置。
網上大體都是如下:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=8099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
以上配置,本地環(huán)境可以,如果是遠程的話,這樣是不行的。
遠程連接需要增加 rmi 配置:
-Djava.rmi.server.hostname=192.168.180.1
注意:另外需要檢查 hostname –i,看解析出來是否包含本地的IP,如是只有127.0.0.1或者其他的IP,會連接不上。
配置正確的顯示如下:
[user ~]$ hostname -i
127.0.0.1 192.168.180.1
[user ~]$
以上配置加了后,測試環(huán)境可以連接了,但是線上環(huán)境還是不行。
?繼續(xù)找原因,發(fā)現(xiàn)是防火墻的原因屏蔽了相關接口。
? ? ? ? 在Java啟動時,JMX會綁定一個接口,RMI也會綁定一個接口,在復雜網絡環(huán)境下,有可能你通過打開防火墻允許了JMX端口的通過,但是由于沒有放行RMI,遠程連接也是會失敗的。
這是因為JMX在遠程連接時,會隨機開啟一個RMI端口作為連接的數(shù)據(jù)端口,這個端口會被防火墻給阻止,以至于連接超時失敗。在Java7u25版本后,可以使用?-Dcom.sun.management.jmxremote.rmi.port參數(shù)來指定這個端口;好消息是,你可以將這個端口和jmx.port的端口設置成一個端口,這樣防火墻就只需要放行一個端口就可以了。
增加 rmi 端口配置:
-Dcom.sun.management.jmxremote.rmi.port=8099
加了后,可以遠程連接線上生產環(huán)境了。
生產環(huán)境還需要注意,找運維配合開放指定 ip 和 端口的權限, netstat 查詢自己配置的端口(如8099)是否已被監(jiān)聽,
可以通過 telnet ip port 來檢查 端口是否請求通,如:
telnet 192.168.180.1 8099
總結:
JMX 最全配置:
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8099 \
-Dcom.sun.management.jmxremote.local.only=true \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=8099 \
-Djava.rmi.server.hostname=192.168.180.1
References
————————————————
版權聲明:本文為CSDN博主「CleverApe」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_27641935/article/details/102919542