【问题标题】:Cannot connect to Tomcat's MBeanServer via jconsole in Java6无法通过 Java 6 中的 jconsole 连接到 Tomcat MBeanServer
【发布时间】:2009-04-13 08:20:16
【问题描述】:

我在 vista 机器上。我已经使用以下选项启动了 tomcat 5.5.27:

CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=9003 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false"

当我通过 jconsole 连接并添加以下服务 url 时

service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi

它无法连接。有什么想法吗?

【问题讨论】:

    标签: java tomcat jmx administration


    【解决方案1】:

    好的,我原本以为 op 给出的 URL 是错误的,但事实证明不是。所以我无法回答。

    不过,这里是基础知识:

    通过jconsole 进行简单连接。

    如果您知道您要连接的 JMX 服务器的 RMI 注册端口位于 9003,例如,使用连接

    localhost:9003
    

    改为。

    否则,这是我从头开始发现的:

    假设您有 JMX 服务器(别名“JMX 代理”别名“您要连接的 JVM”)在“目标机器”上运行,RMI 注册表端口位于“RMI REGISTRY PORT”以及位于“JMX RMI SERVER PORT”的 JMX RMI 服务器端口。

    注意:

    1. RMI 注册表 告诉 JMX 客户端在哪里可以找到 JMX RMI 服务器端口;信息可以在密钥jmxrmi下获取。
    2. RMI 注册端口通常是众所周知的,因为它是在 JVM 启动时通过系统属性设置的。
    3. JMX RMI 服务器端口 通常不被 JVM 随机选择(如果没有采取其他预防措施)。

    以下 URI 将导致成功(已测试)

    service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

    这看起来很糟糕。让我们把它分开。

    这个 URI 是一个 RFC2609“服务位置协议 URL”(嗯,它真的是一个 URI,对吧?)

    它由以下部分组成:

    • service - 一个常数
    • jmx:rmi - 服务类型 由:抽象类型 jmx 和 URL 方案 rmi
    • 其余部分 - sap(服务访问协议规范)

    sap分解成:

    • //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT> - ipsite
    • /jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - 网址部分

    消息灵通的 JMX 客户端连接到“ipsite”以进行 JMX-over-RMI 交换;但是不知道该端口的 JMX 客户端呢?耐心...

    URL部分分解成:

    • /jndi/ - 这似乎告诉 JMX 客户端它可以在后面的位置获取查找信息
    • rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - 是的,我们在 RMI 注册表中的查找键 jmxrmi 下获得有关 JMX RMI 服务器的信息

    这有点像本末倒置,因为必须首先联系 SLP URL 的后部分提供的 RMI 注册表。

    挠头后,凭直觉,我们试试:

    service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

    是的,这行得通! JMX RMI 服务器端口很好地从注册表中获得。再三考虑,目标机器也应该从注册表中获得,因此:

    service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

    更好的是,它也有效!

    参考资料:

    1 download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
    2 download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
    3 mx4j.sourceforge.net/docs/ch03s04.html
    4 download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
    5 http://www.rfc-editor.org/rfc/rfc2609.txt
    

    【讨论】:

      【解决方案2】:

      在 Ubuntu 10.04 上,使用 OpenJDK 6 和 Tomcat 6.0.29,无论我有多少 com.sun.management.jmxremote.* 选项,我都无法为本地 jconsole 会话激活 JMX使用 CATALINA_OPTS 传递给 java。问题在于 -Djava.io.tmpdir 设置,默认为 $CATALINA_BASE/temp。我只需要设置:

      CATALINA_TMPDIR="/tmp"
      

      在 bin/catalina.sh 的开头,我能够在本地连接 jconsole、jmap、jps 等。不需要任何 com.sun.management.jmxremote .* 设置。

      【讨论】:

      • 这对我不起作用,我仍然收到同样的错误。无论如何,很高兴它对您有所帮助,但我想知道为什么这有效背后的直觉。或许这个想法可以延伸……
      【解决方案3】:

      进程是否在同一用户下运行?

      也可以通过运行 jps 和 jconsole 来检查(都在 JDK_HOME/bin 目录下)

      【讨论】:

        【解决方案4】:

        这对于 OS X 10.7 aka Lion 也是必需的。

        【讨论】:

          【解决方案5】:

          我在这里回答了类似的问题:java.rmi.ConnectException: Connection refused to host: 127.0.1.1;

          我发现了很多关于这个主题的问答,但没有什么对我有帮助 - 那是因为我的问题更基本(我能说我不是网络专家:))。我在 /etc/hosts 中的 IP 地址不正确。我尝试过的 CATALINA_OPTS 包括以下内容:

          CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true -Xmx128M -server 
          -Dcom.sun.management.jmxremote 
          -Dcom.sun.management.jmxremote.port=7091 
          -Dcom.sun.management.jmxremote.authenticate=false 
          -Dcom.sun.management.jmxremote.ssl=false
          -Djava.rmi.server.hostname=A.B.C.D"  #howeverI put the wrong ip here!
          
          export CATALINA_OPTS
          

          我的问题是我几个月前更改了我的 IP 地址,但从未更新我的 /etc/hosts 文件。似乎默认情况下 jconsole 以某种方式使用主机名 -i ip 地址,即使我正在查看本地进程。最好的解决方案是简单地更改 /etc/hosts 文件。

          另一个可行的解决方案是从 /sbin/ifconfig 获取正确的 IP 地址,并在指定 IP 地址时使用该 IP 地址,例如 catalina.sh 脚本:

          -Djava.rmi.server.hostname=A.B.C.D
          

          【讨论】:

            猜你喜欢
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-12
            • 1970-01-01
            • 2020-02-07
            • 2017-03-25
            • 1970-01-01
            相关资源
            最近更新 更多