2012-08-26 80 views
4

我在Spring3.1獨立環境下開發。不能連接JMX遠程與jconsole

我想通過jconsole遠程連接我的應用程序。 它在本地工作,但是當我將應用程序部署到Linux機器時,它會超時。

我使用守護程序來運行我的環境。

這是我在run.sh腳本中加入:

-Dcom.sun.management.jmxremote \ 
-Dcom.sun.management.jmxremote.port=6969 \ 
-Dcom.sun.management.jmxremote.ssl=false \ 
-Dcom.sun.management.jmxremote.authenticate=false \ 
com.mypackage.daemon.FixDaemon 

和裏面的applicationContext.xml:

<context:mbean-server /> 
<context:mbean-export /> 
現在

的Linux機器上做的netstat後,那是什麼,我們看到:

[[email protected] logs]# netstat -an | grep 6969 
tcp  0  0 :::6969      :::*      LISTEN 

,所以它看起來像它不聽。

但是當我在jconsole界面內添加我的ip:6969時,我得到連接失敗的彈出窗口。

任何想法我做錯了什麼?

謝謝, 射線。

回答

5

第一次嘗試也是這個選項添加到您的應用程序:

-Djava.rmi.server.hostname=<ip>

還要記住JConsole的使用RMI的通信。這意味着jconsole首先連接到ip:6969。然後服務器生成一個隨機端口X,並將其傳回到jconsole。 Jconsole然後打開另一個連接到IP:X。由於X是隨機的,您無法在防火牆中打開此特定端口。您必須打開所有端口或使用另一個主題的socks代理。

1
  1. 嘗試使用telnet從本機連接到該端口。如果這不成功,通常是因爲防火牆丟包。您將不得不與網絡管理員聯繫以打開該端口。

    注意:你將不得不打開兩個端口。一個用於綁定RMIRegistry,另一個用於導出RMI對象。 RMI通常將對象導出到隨機高端口。但是這不適用於防火牆環境,因此您必須配置其導出的端口。這是通過使用RMI URL來完成的。

  2. 如果您在Linux上運行此操作,請執行hostname -i,如果它返回127.0.0.1,則修復/etc/hostsThe FAQ entry for JConsole有更多相關信息。

  3. 我強烈建議的另一個選擇是查看Jolokia,它不涉及更改防火牆配置,但仍然通過HTTP提供JMX好吃的東西。