2013-12-17 161 views
2

使用VisualVM,我可以看到兩種連接遠程主機的類型。無法連接到遠程JMX主機

  1. jstatd

  2. JMX

所以我試圖用JMX,我跟很多教程,但至今沒有運氣。

目前,我的桌面和一個運行java服務器應用程序的Linux機器。 我想在桌面上安裝VisualVM客戶端來查看運行在Linux機器上的Java應用程序。

我在linux上爲Java應用程序的start.sh腳本添加了以下JAVA_OPTS腳本。在Linux上

JMX_PORT="-Dcom.sun.management.jmxremote.port=33333" <-- allowed on firewall 
JMX_SSL="-Dcom.sun.management.jmxremote.ssl=false" 
JMX_AUTH="-Dcom.sun.management.jmxremote.authenticate=false" 
JMX_IP="-Djava.rmi.server.hostname=xx.xx.xx.xx" <-- where linux box NAT ip. 

Java應用程序成功啓動添加了start.sh JMX的選擇,我認爲因爲沒有錯誤或警告。

當我試圖添加JMX連接時,它說它無法連接到它。

我檢查了33333是否被阻塞,它不是,我能夠通過從我的桌面使用telnet連接到該端口。

是否有任何其他端口應該爲VisualVM打開?

要使用JMX,是否還有其他任何設置,例如RMI註冊服務器或jstatd策略文件創建並啓動jstat守護程序?我認爲這只是爲了jstatd連接,所以我沒有去追求這個教程。

+1

我只是使用一個ssh隧道,最簡單和無痛 – 2013-12-17 06:57:32

+1

@RC。感謝您的評論,但港口並不是這裏的主要問題,因爲它是非常封閉的網絡,我必須遵循特定的程序。底線是我不清楚JMX連接和VisualVM如何工作。 – handicop

回答

1

我沒有其他線索如何解決這個問題,結果使用SSH隧道。

  1. 我在遠程主機上的java應用程序啓動腳本中添加了jmx運行選項。 (jmxremote.port = 33300,ssl爲false,驗證爲false,主機名。)
  2. ssh -D 33300從桌面到遠程主機。使用system_socks_proxy =本地主機
  3. 開始jvisualvm:33300 -J-Djava.net.useSystemProxies =真

現在遠程主機成功添加使用上添加新的VisualVM JMX連接。

ref。 VisualVM over ssh

+0

由於[TCP-over-TCP](http://sites.inka.de/bigred/devel/tcp-tcp.html)問題,我不喜歡ssh隧道。使用openvpn,您使用的是UDP,並避免了TCP-over-TCP問題。 – LinuxLuigi

2

最簡單的方法是在服務器和桌面之間使用openvpn隧道,而不是將防火牆擺脫NAT。我這樣做,它就像一個魅力。