JVisualVM 内存采样:不支持远程应用程序
Posted
技术标签:
【中文标题】JVisualVM 内存采样:不支持远程应用程序【英文标题】:JVisualVM Memory Sampling : Remote applications are not supported 【发布时间】:2011-09-14 14:25:17 【问题描述】:我正在尝试在 Red Hat Linux 中使用 JVisualVM 监控远程 tomcat 进程。 CPU 采样工作正常,但内存采样选项卡被禁用。它说“内存采样:不可用。不支持远程应用程序”。
进程的命令行参数:
-Djavac.source=1.5 -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=11107
JVisualVm 详细信息:
Version:
1.6.0_24 (Build 100930); platform 100909-1140d3a55456
System:
Linux (2.6.18-53.1.14.el5) , i386 32bit
Java:
1.6.0_24; Java HotSpot(TM) Client VM (19.1-b02, mixed mode)
有什么我想念的吗?我对这一切都很陌生。
【问题讨论】:
两台机器上的jdk版本都是1.6时-Djavac.source=1.5
会不会有问题?
【参考方案1】:
您可以通过
解决此错误$ ssh -Y user@remotemachine
$ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_135.zip
$ unzip visualvm_135.zip
$ cd visualvm_135/bin
$ ./visualvm
此 visualvm 实例将功能齐全,包括内存和 CPU 采样。
在此处阅读更多信息:http://shahriarinia.blogspot.com/2013/05/java-cpumemory-heap-usage-monitoring.html
http://mshahriarinia.com/
【讨论】:
不知道为什么这个答案被否决了。它工作得很好,并且提供了比公认答案更多的细节。【参考方案2】:内存采样使用Attach API,它仅适用于在与 VisualVM 相同的用户下运行的本地应用程序。您可以在远程机器上运行 VisualVM 并使用远程 X 会话在本地机器上显示输出。
【讨论】:
谢谢 tomas,如果可能的话,请您解释一下或提供一些链接,如何使用远程 x 会话 @Jitendra 最简单的方法是使用 'ssh -Y' 登录到远程计算机并从远程 shell 启动 VisualVM。 这个答案并没有真正解释你需要知道的一切,特别是如何完成远程 X 会话。【参考方案3】:遵循先前给出的答案,但还有一些需要确认的部分:
-
无法远程采样内存
使用 X 运行 VisualVM 的本地到 jvm 实例并将 DISPLAY 导出回您的工作站
jdk_1.7.0_25 存在一些令人讨厌的问题,至少在我的情况下,在 CentOS 下会导致尝试运行 jvisualvm 或下载的 VisualVM 时抛出异常:
java.lang.NoClassDefFoundError: 无法初始化类 sun.awt.SunToolkit
使用相同的用户帐户来运行您的目标 JVM(在我的例子中是 Tomcat 服务器)和您的 VisualVM 实例
根据之前的回答,这很有用(谢谢Morteza Shahriari Nia)
$ ssh -Y user@remotemachine
$ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_136.zip
$ unzip visualvm_136.zip
$ cd visualvm_136/bin
$ ./visualvm
每次运行“visualvm_136/bin/visualvm”之前,将您的 X 显示器放回您需要的工作站...
-
本地机器:$ xhost +
远程机器:$ export DISPLAY=your_workstation_ip:0.0
一旦它启动(并且您的目标 JVM 已经在运行并且您的用户帐户与上述 #4 相同),您将在 VisualVM 的“本地”部分中看到您的目标 PID。
我能够使用不同版本的 jdk 并且仍然能够看到内存采样器已启用 - 在我的情况下,目标 Tomcat JVM 正在运行 jdk_1.7.0_25,而我的 VisualVM 实例是早期版本 jdk_1.7.0_04(由于问题#3,VisualVM 必须使用不同的版本)。
希望对您有所帮助...
【讨论】:
以上是关于JVisualVM 内存采样:不支持远程应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU