使用 VisualVM 进行 JAVA 远程分析

Posted

技术标签:

【中文标题】使用 VisualVM 进行 JAVA 远程分析【英文标题】:JVM remote profiling with JVisualVM 【发布时间】:2013-02-05 20:04:28 【问题描述】:

我正在尝试在远程主机上分析我的 jvm 应用程序。 我正在使用 Jvisualvm 我按照这里的建议设置了 jstatd(链接已删除,导致钓鱼网站)。 我能够成功地“telnet remotehost 1099”。所有的 tcp/ip 端口都在远程打开防火墙。

我在 jvisualvm 中添加了我的远程主机。另外,请确保 jstatd 端口是 1099,刷新时间为 3 秒。

我用

开始我的应用程序
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8011 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

但是,我的 jvm 应用程序没有出现在我的 jvisualvm 中。还有什么我需要配置或检查的吗?

jvisualvm 1.3.5 本地:Mac OSX Oracle jdk 1.6.37 远程:centos 6 oracle jdk 1.6.24

【问题讨论】:

【参考方案1】:

1) 您应该在启用JMX 的情况下启动您的应用程序 远程连接示例

-Dcom.sun.management.jmxremote    
-Dcom.sun.management.jmxremote.port=9990   
-Dcom.sun.management.jmxremote.authenticate=false   
-Dcom.sun.management.jmxremote.ssl=false  

2) 你应该有JMX 类才能对它们做一些事情。我想你知道这一点

【讨论】:

是的,我用我正在使用的命令行选项更新了我的问题。我不确定通信链接的部分。 a) Jvisualvm 与 jstatd 默认端口 1099 对话。与 jxmremote.port 有什么关系。 b) 另外,不确定您所说的拥有 JXM 类是什么意思。【参考方案2】:

你需要在远程机器上启动jstatd。为此,在远程计算机的主目录中创建一个jstatd.all.policy 文件并添加以下行:

grant codebase "file:$java.home/../lib/tools.jar"    
    permission java.security.AllPermission;
;

然后在远程计算机的命令行上键入

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=Your IP address '

在远程机器上启动jstatd 服务后,您基本上可以使用添加远程主机在jvisualVM UI 上添加远程连接IP 地址连接。

JvisualVM 的 Oracle 文档可以参考https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/applications_remote.html,但理解jstatd 的步骤确实令人困惑。

【讨论】:

另一个注意事项是确保您以普通用户身份启动 VisualVM,即使用psexec -s。 VisualVM 中的功能在Local 的右键菜单中也称为Add jstatd Connection

以上是关于使用 VisualVM 进行 JAVA 远程分析的主要内容,如果未能解决你的问题,请参考以下文章

性能测试之JVM的故障分析工具VisualVM

使用 visualvm 和 JMX 进行远程监控

JVM探秘:VisualVM监控远程Java进程

使用VisualVM远程监控JVM Linux服务器配置方法

使用 VisualVM 进行性能分析及调优

使用Java visualVM监控远程JVM