22

我是 Java 新手,在将远程主机连接到JVisualVM.

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

  1. 我首先jstatd.all.policy$JAVA_HOME/bin. 该文件包含:grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};

  2. 我开始Jstatdjstatd -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 进程。

谁能帮我解决这个问题。

谢谢。

4

5 回答 5

16

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

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

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

提到的 IP 地址应该是服务器外部 IP(可能听起来很傻,但它对我有用)。我的主要问题是 JMX 指向 localhost 和循环。在配置文件中,应将确切的 IP 地址设置为远程主机。我在博客中将其描述为“问题 2” :处理连接问题

  • 如果防火墙阻止是一个问题,那么我建议尝试使用 SSH 隧道(设置简单)的 XMing。以下是说明,如果您在设置时遇到问题:
    使用 Xming 远程使用 VisualVM(我的博客) 使用 XMing 的最大优势是它几乎总是在启用 SSH 时工作。您只需将 VisualVM 文件放在远程主机上并从命令行运行它。XWindow 将在您的本地计算机上显示 VisualVM 窗口。

  • 有可能是 VisualVM 问题 - 尝试使用其他工具来验证问题所在。我推荐JConsole。它的工作原理类似于 VisualVM,我还在我的博客上描述了详细信息

于 2012-02-25T14:01:58.960 回答
13

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

于 2013-09-17T11:46:37.780 回答
8

要连接到远程 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 连接,双击它就可以了!

可以在此处找到有关Java 监控和管理平台的更多详细信息。

于 2011-10-25T06:58:44.613 回答
2

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

第 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

在此处输入图像描述

第 5 步:JMX 连接添加到远程主机,如下图所示,然后单击 OK 按钮: 在此处输入图像描述

于 2017-05-29T11:18:30.683 回答
1

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

  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. 右键单击“远程”>“添加远程主机...”并在“主机名”中输入您的远程主机名(如果您不使用端口1099,您可以在“高级设置”中更改此设置)
    2. 右键单击您刚刚创建的远程主机>“添加 JMX 连接...”并<remote_host_name>:1102在“连接”输入中输入“”,并选中“不需要 SSL 连接”
    3. 您的 Java 进程将出现两次:一次来自“jstatd”连接类型,一次来自“JMX”连接类型。

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

于 2016-11-03T15:16:00.093 回答