2011-03-28 175 views
13

我有一個Web應用程序部署到遠程樹脂服務器,並且它已打開JMX。調試JConsole連接失敗

我可以遠程登錄到遠程服務器即

[email protected]:/tmp$ telnet <remote-ip> 5555 
Trying <remote-ip>... 
Connected to <remote-ip>. 
Escape character is '^]'. 
��sr5javax.management.remote.message.HandshakeBeginMessage�,���6profilestLjava/lang/String;Lversionq~xppt1.0^] 

telnet> q 
Connection closed. 

但是用我無法連接到它在我的JConsole

$JAVA_HOME/bin/java -cp $JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:pm-common/lib/jmxremote_optional-1_0_1_3.jar sun.tools.jconsole.JConsole service:jmx:jmxmp://<remote-ip>:5555 

我有以下的Java版本試過,但我得到一個「連接失敗'兩個實例。

## where JAVA_HOME=/opt/java/64/jdk1.5.0_22 
java version "1.5.0_22" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03) 
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode) 

## where JAVA_HOME=/opt/java/64/jdk1.6.0_17 
java version "1.6.0_17" 
Java(TM) SE Runtime Environment (build 1.6.0_17-b04) 
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode) 

你們是否有任何想法來了解如何調試(即找出哪裏出了問題)?

回答

26

確保您使用下面的Java性能運行你的應用程序設置

-Dcom.sun.management.jmxremote.port=9005 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 

立即嘗試連接。 如果你想調試這一點,你可以用下面的命令

jconsole -J-Djava.util.logging.config.file=path_to_logging.properties_for_jconsole 

下面是logging.properties的內容文件

Logging.properties 

handlers = java.util.logging.ConsoleHandler 


.level = INFO 

java.util.logging.ConsoleHandler.level = FINEST 

java.util.logging.ConsoleHandler.formatter = \ 

java.util.logging.SimpleFormatter 

// Use FINER or FINEST for javax.management.remote.level - FINEST is 

// very verbose... 

javax.management.level = FINEST 

javax.management.remote.level = FINER 

一旦運行jconsole一個單獨的窗口會彈出顯示運行的JConsole日誌。

+0

Ey!那麼缺少的屬性'java.rmi.server.hostname'呢?注意這篇文章:http://www.gubatron.com/blog/2010/11/21/jconsole-connection-failed-retry-solved-java-jmx/!希望能幫助到你! – Victor 2014-11-27 20:07:13

+0

還要確保密碼文件被讀保護!即。只有用戶可以閱讀它 - 用chmod 600 – Mafro34 2015-01-28 07:21:37

1

我不知道這是有益的,但也許你應該使用在JDK bin目錄中的JConsole的二進制文件,而不是使用無證(如有更改)的陽光。*類啓動控制檯

+0

仍然沒有工作。我也不知道如何調試。 – 2011-04-14 02:59:58

+0

解釋常見連接問題的這篇文章(http://blogs.sun.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole)可能會有用。如果沒有正常工作,請查看/發佈調試日誌 – qwerty 2011-04-14 03:55:57

1

如果您的應用程序是在JDK 1.6上運行的,那麼您應該能夠連接它。是否它被利用JDK之前1.6然後用指定以下JVM參數

-Dcom.sun.management.jmxremote

+0

不起作用(在JDK1.5和JDK1.6上都嘗試過)。而且我也不知道如何調試它。 – 2011-04-14 02:43:08

3

運行它開始通過cygwin的所述Java的過程時所遇到的相同的問題。 JConsole無法連接。通過win7-cmd啓動它,一切都按預期工作。

1

我有類似的問題,遠程計算機在防火牆後面,防火牆阻止了由-Dcom.sun.management.jmxremote.port和RMI 46924定義的端口。在允許我連接到這些端口後,我連接成功。

+0

這樣做在我的情況下,RMI端口是43702,我發現通過使用logging.properties調試 – 2015-03-30 18:49:48

8

這終於使這對我的工作:給這個額外的選項:-Djava.rmi.server.hostname=<ip addres where jvm is running

因此,所有用於從遠程計算機打開JConsole的VM參數,在遠程機器上的JVM必須與

-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote -com.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ip address> 
開始

整個過程列出here

+1

這也適用於我。似乎當你有NAT時,你需要指定服務器地址。 – hacket 2014-09-09 17:27:49

+0

經過長時間的搜索,從不同的機器連接時,添加-Djava.rmi.server.hostname = 終於適用於我。以下是全部參數: java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only = false \ -Dcom.sun.management.jmxremote.port = 9999 \ -Dcom。 sun.management.jmxremote.authenticate = false \ -Dcom.sun.management.jmxremote.ssl = false \ -Djava.rmi.server.hostname = \ com.example.Main – 2017-02-05 02:45:05