今天在使用JConsole進行遠程連接時,發現IP和端口在Windows下是可以遠程telnet的,但是,使用JConsole時卻無法連接。
我的環境如下:
Windows下運行JConsole,准備遠程連接Ubuntu 16.04下的一個測試的Java進程;
Ubuntu 16.04 運行了一個Java進程,其運行的參數如下:
java -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 進程名
於是,我直接在Windows下運行JvisualVM,然后輸入ip+端口進行連接,收到了如下錯誤。

我的處理過程:
1. 檢查linux的防火牆是否關閉;ufw status,如果是active的,運行 sudo ufw disable來禁用防火牆;

2. 檢查在Windows下是否能夠telnet 8999端口; 運行cmd,然后在cmd中敲入:telnet 192.168.197.136 8999,如下截圖表示不通,這時請關閉Linux防火牆或者配置防火牆規則,打開8999端口;

3. 上述兩步都完成以后(關閉防火牆,且能telnet 8999端口),如果還不能訪問,就進行如下的操作,查看hostname -i 是不是當前服務器的IP地址,如果不是,跳到第四步;

4. 修改hostname對應的IP地址:sudo vi /etc/hosts,修改完之后,重新運行hostname -i,應該就是當前服務器的IP了。

至此,再次運行服務器上的java進程,通過JvisualVM的遠程訪問功能就能訪問和監控Java進程的相關情況了。

