无法将远程主机连接到VisualVM

时间:2011-10-24 05:49:26

标签: monitoring jmx visualvm

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

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

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

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

  3. 启动
  4. 我在远程主机上启动了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
    
  5. 然后我在本地计算机上作为JVisualVM的实例启动,当我添加远程主机时,它已连接但我无法看到任何Java进程。

  6. 任何人都可以帮助我。

    感谢。

5 个答案:

答案 0 :(得分:14)

连接到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

  • 上描述了详细信息

答案 1 :(得分:10)

您需要使用指向服务器外部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

答案 2 :(得分:6)

要连接到远程VM ,您必须使用特定选项启动该远程VM

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连接,双击它就可以了!
  4. 可以找到有关 Java监控和管理平台的更多详细信息here

答案 3 :(得分:0)

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

  1. 以这种方式在远程主机中启动ejstatd(在ejstatd文件夹中):mvn exec:java -Djava.rmi.server.hostname=<remote_host_name> -Dexec.args="-pr 1099 -ph 1100 -pv 1101"(用于“jstatd”类型连接)(如果您的远程主机名只指定-Djava.rmi.server.hostname主机与您从本地网络看到的主机不匹配)
  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=<remote_host_name>(用于“JMX”类型连接)(与-Djava.rmi.server.hostname的上一个点相同)
  3. 打开远程主机上的这4个端口,并将其提供给您的本地计算机:1099110011011102
  4. 启动JVisualVM
    1. 右键点击“远程”&gt; “添加远程主机...”并在“主机名”中输入您的远程主机名(如果您不使用端口1099,则可以在“高级设置”中更改此项)
    2. 右键单击刚刚创建的远程主机&gt; “添加JMX连接...”并在“连接”输入中输入“<remote_host_name>:1102”,并选中“不要求SSL连接”
    3. 您的Java进程将出现两次:一个来自“jstatd”连接类型,另一个来自“JMX”连接类型。
  5. 免责声明:我是开源ejstatd工具的作者。

答案 4 :(得分:0)

在需要监控的服务器上的jstatd中启动nohup,然后按照以下步骤将VisualVM连接到jstatd端口:

第1步:创建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

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

enter image description here

步骤5: JMX连接添加到远程主机,如下图所示,然后点击确定按钮: enter image description here