有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调试JConsole连接失败

我将一个web应用程序部署到一个远程树脂服务器上,并打开了JMX

我可以远程登录到远程服务器,即

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)

你们知道如何调试它吗(即找出问题所在)


共 (6) 个答案

  1. # 2 楼答案

    确保在运行应用程序时设置了以下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
    
    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后,将弹出一个单独的窗口,显示日志

  2. # 3 楼答案

    我在通过cygwin启动Java进程时遇到了同样的问题。JConsole无法连接。通过win7 cmd启动,一切正常

  3. # 4 楼答案

    这终于让它对我起作用了:给这个额外的选项: -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 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ip address>
    

    整个过程列在here

  4. # 5 楼答案

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

  5. # 6 楼答案

    如果您的应用程序运行在JDK1.6上,那么您应该能够连接它。如果它使用的是1.6之前的JDK,那么运行它时指定以下JVM参数

    -Dcom。太阳经营jmxremote