【问题标题】:Not able to Connect a Remote Host to the VisualVM无法将远程主机连接到 VisualVM
【发布时间】:2011-10-24 05:49:26
【问题描述】:

我是 Java 新手,在将远程主机连接到 JVisualVM 时遇到问题。

我已经搜索了互联网并按照那里提到的所有步骤操作,但仍然无法解决问题。我遵循的步骤是:

  1. 我首先在$JAVA_HOME/bin 中创建了一个jstatd.all.policy 文件,从而在远程服务器上启动了jstatd。该文件包含:grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};

  2. 我将Jstatd 启动为jstatd -J-Djava.security.policy=jstatd.all.policy

  3. 我在远程主机上启动了 Java 应用程序:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  4. 然后,我在本地计算机上作为 JVisualVM 的实例开始,当我添加远程主机时,它已连接,但我无法看到任何 Java 进程。

谁能帮帮我。

谢谢。

【问题讨论】:

  • 只编辑你的问题更简单...

标签: monitoring jmx visualvm


【解决方案1】:

我在连接到 Glassfish 应用服务器时遇到了类似的问题。查看对我有用的解决方案,因为它们对您可能相同:

  • 尝试在您的应用程序上设置:

    -Djava.rmi.server.hostname=*Remote_Server_External_IP_Address*

提到的 IP 地址应该是服务器外部 IP(可能听起来很傻,但它对我有用)。我的主要问题是 JMX 指向 localhost 和循环。在配置文件中,应将确切的 IP 地址设置为远程主机。我在my blog: handling connection problems 中将其描述为“问题 2”
  • 如果防火墙阻止是一个问题,那么我建议尝试使用 SSH 隧道(设置简单)的 XMing。这是说明,如果您在设置时遇到问题:
    Remote use of VisualVM with Xming (my blog) 使用 XMing 的最大优势是它几乎总是在启用 SSH 时工作。您只需将 VisualVM 文件放在远程主机上并从命令行运行它。 XWindow 将在您的本地计算机上显示 VisualVM 窗口。

  • 有可能是 VisualVM 问题 - 尝试使用其他工具来验证问题所在。我推荐 JConsole。它的工作原理类似于 VisualVM,我还在 my blog

  • 上描述了详细信息

【讨论】:

    【解决方案2】:

    您需要使用指向服务器外部 IP 或主机名的附加选项来启动 jstatd:

    statd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=my_server_ip/hostname
    

    答案基于:https://java.net/projects/visualvm/lists/users/archive/2010-03/message/8

    【讨论】:

    • 谢谢,java.rmi.server.hostname 终于让它为我工作了。
    【解决方案3】:

    要连接到远程虚拟机您必须使用特定选项启动远程虚拟机

    java
     -Dcom.sun.management.jmxremote
     -Dcom.sun.management.jmxremote.port=9000
     -Dcom.sun.management.jmxremote.ssl=false
     -Dcom.sun.management.jmxremote.authenticate=false
    class
    

    VM 启动后,转到您的 VisualVM 并执行以下操作:

    1. 文件 -> 添加 JMX 连接
    2. 键入:yourHostName:9000 并单击“确定”
    3. 在左侧您将添加 JMX 连接,双击它就可以了!

    有关 Java 监控和管理平台的更多详细信息,请访问here

    【讨论】:

    • 我使用你提到的步骤执行了java应用程序,但它仍然没有显示我添加的远程主机下的任何java进程。当我尝试添加 jmx 连接时,它会在日志文件中出现以下错误:**connect(service:jmx:rmi:///jndi/rmi://10.88.36.146:9000/jmxrmi) java.net.ConnectException :连接被拒绝:**
    • 检查两台机器上的防火墙...可能不允许通过端口 9000 的流量...
    • 我已禁用本地计算机上的防火墙,远程主机上的 IP 表设置为:Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
    • google 一下以了解如何查看允许的端口,然后如何允许端口(在您的情况下为 9000)...或者,如果您不在已知端口上运行某些东西(80, 22, 443) - 使用该端口启动 VM...
    • 我认为是防火墙问题。要对其进行测试,请禁用远程主机上的防火墙。另请注意,仅打开 9000 端口是不够的,JMX 使用额外的动态分配端口进行通信。
    【解决方案4】:

    在需要监控的服务器上的nohup中启动jstatd,并将VisualVM连接到jstatd端口,步骤如下:

    第一步:创建start-jstatd.sh并复制以下内容:

    nohup jstatd -p 1099 -J-Djava.security.policy=<(echo 'grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};') &
    

    第 2 步: 授予文件可执行权限:

    $ chmod a+rwx start-jstatd.sh
    

    第 3 步: 启动 jstatd:

    $ sh start-jstatd.sh
    

    第四步:VisualVM中添加远程主机:

    第五步:JMX Connection添加到Remote Host,如下图所示,点击OK按钮:

    【讨论】:

      【解决方案5】:

      以下是执行此操作的步骤:

      1. 以这种方式在远程主机中启动ejstatd(在 ejstatd 文件夹中):mvn exec:java -Djava.rmi.server.hostname=&lt;remote_host_name&gt; -Dexec.args="-pr 1099 -ph 1100 -pv 1101"(用于“jstatd”类型的连接)(如果远程主机的主机名与您从本地网络看到的)
      2. 使用这些额外的 Java 参数启动您的 Java 应用程序:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1102 -Dcom.sun.management.jmxremote.rmi.port=1102 -Djava.rmi.server.hostname=&lt;remote_host_name&gt;(用于“JMX”类型的连接)(与-Djava.rmi.server.hostname 的前一点相同)
      3. 打开远程主机上的这 4 个端口,使它们可用于本地计算机:1099110011011102
      4. 启动 JVisualVM
        1. 右键单击“远程”>“添加远程主机...”并在“主机名”中输入您的远程主机名(如果您不使用端口1099,您可以在“高级设置”)
        2. 右击刚刚创建的远程主机>“添加JMX连接...”,在“连接”输入中输入“&lt;remote_host_name&gt;:1102”,勾选“不需要SSL连接”
        3. 您的 Java 进程将出现两次:一次来自“jstatd”连接类型,一次来自“JMX”连接类型。

      免责声明:我是开源ejstatd 工具的作者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-13
        • 2016-11-27
        • 2017-09-14
        • 2011-09-03
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多