使用 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 远程分析的主要内容,如果未能解决你的问题,请参考以下文章