调试JConsole连接失败

rvero 发布于 2018-11-05 connect 最后更新 2018-11-05 14:57 87 浏览

我有一个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.
但我无法使用我的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)
你们有没有想法知道如何调试(即找出问题所在)?
已邀请:

xipsam

赞同来自:

我有类似的问题,远程机器在防火墙后面,防火墙阻止了由-Dcom.sun.management.jmxremote.port和RMI 46924定义的端口。允许我连接到这些端口后,我成功连接。

xqui

赞同来自:

如果您的应用程序在JDK 1.6上运行,那么您应该能够连接它。如果它在1.6之前使用JDK,则通过指定以下JVM参数来运行它 -Dcom.sun.management.jmxremote

oad

赞同来自:

我不知道这是否有用,但也许您应该使用JDK bin目录中的jconsole二进制文件,而不是使用未记录的(并且可以更改)sun。*类来启动控制台

get

赞同来自:

通过cygwin启动Java-Process时遇到了同样的问题。 JConsole无法连接。通过win7-cmd启动它一切都按预期工作。

znemo

赞同来自:

这最终使它对我有用:给出这个额外选项:-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

uanimi

赞同来自:

如果你运行jconsole -debug它会为你提供更多关于失败的诊断信息。参考: http://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole 我做了这个,它告诉我当他们使用不同的64位jvm启动时我使用32位jconsole,所以它失败了。

miure

赞同来自:

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

-Dcom.sun.management.jmxremote.port=9005
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
现在尝试连接。 如果要调试它,可以使用以下命令运行jconsole
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后,将弹出一个显示日志的单独窗口。