我是Java的新手,我在将远程主机连接到JVisualVM
时遇到了问题。
我搜索了互联网,并按照那里提到的所有步骤进行了搜索,但仍然无法解决问题。我遵循的步骤是:
我首先在jstatd.all.policy
中创建了一个$JAVA_HOME/bin
文件,从远程服务器上启动了jstatd。该文件包含:grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};
我将Jstatd
作为jstatd -J-Djava.security.policy=jstatd.all.policy
我在远程主机上启动了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
然后我在本地计算机上作为JVisualVM
的实例启动,当我添加远程主机时,它已连接但我无法看到任何Java进程。
任何人都可以帮助我。
感谢。
答案 0 :(得分:14)
连接到Glassfish应用程序服务器时遇到类似问题。请参阅适用于我的解决方案,因为它们可能与您相同:
-Djava.rmi.server.hostname = * Remote_Server_External_IP_Address *
中将其描述为“问题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并执行以下操作:
可以找到有关 Java监控和管理平台的更多详细信息here。
答案 3 :(得分:0)
以下是执行此操作的步骤:
mvn exec:java -Djava.rmi.server.hostname=<remote_host_name> -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
(用于“jstatd”类型连接)(如果您的远程主机名只指定-Djava.rmi.server.hostname
主机与您从本地网络看到的主机不匹配)-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
的上一个点相同)1099
,1100
,1101
和1102
1099
,则可以在“高级设置”中更改此项)<remote_host_name>:1102
”,并选中“不要求SSL连接”免责声明:我是开源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
中添加远程主机: