调试JConsole连接失败

Fra*_*See 22 java jmx jconsole connect

我有一个Web应用程序部署到远程树脂服务器,它已打开JMX.

我可以telnet到远程服务器即

franz@see:/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.
Run Code Online (Sandbox Code Playgroud)

但我无法使用我的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
Run Code Online (Sandbox Code Playgroud)

我用以下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)
Run Code Online (Sandbox Code Playgroud)

你们有没有想过如何调试这个(即找出问题所在)?

sam*_*rth 35

确保使用以下java属性集运行应用程序

-Dcom.sun.management.jmxremote.port=9005
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)

立即尝试连接.如果要调试它,可以使用以下命令运行jconsole

jconsole -J-Djava.util.logging.config.file=path_to_logging.properties_for_jconsole
Run Code Online (Sandbox Code Playgroud)

以下是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
Run Code Online (Sandbox Code Playgroud)

一旦运行jconsole单独的窗口,将弹出显示日志.

  • 哎!缺少的属性“java.rmi.server.hostname”呢?留意这篇文章:http://www.gubatron.com/blog/2010/11/21/jconsole-connection-failed-retry-solved-java-jmx/!希望能帮助到你! (2认同)

rog*_*ack 20

如果运行jconsole -debug它,可以为您提供有关故障的更多诊断信息.请参阅 Daniel Fuchs博客文章"排除JConsole中的连接问题".

我做了这个,它告诉我我使用32位jconsole目标进程是用不同的(64位)jvm启动的,所以显然这是不允许的,因此它失败了.


Lav*_*ixu 10

这最终使它对我有用:给出这个额外的选择: -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>
Run Code Online (Sandbox Code Playgroud)

这里列出整个过程