我正在尝试使用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)
有什么我想念的东西。我对这一切都很陌生。
答案 0 :(得分:4)
您可以通过
解决此错误$ 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
答案 1 :(得分:1)
内存采样使用Attach API,它仅适用于在与VisualVM相同的用户下运行的本地应用程序。您可以在远程计算机上运行VisualVM并使用远程X会话在本地计算机上显示输出。
答案 2 :(得分:1)
按照先前的答案给出,但还有几件要承认:
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显示器返回到您需要的工作站...
一旦启动(并且您的目标JVM已经运行并且您的用户帐户与上面的#4相同),您将在VisualVM的“本地”部分中看到您的目标PID。
我能够使用不同版本的jdk并且仍然可以看到内存采样器已启用 - 在我的情况下,目标Tomcat JVM运行jdk_1.7.0_25,而我的VisualVM实例是早期版本jdk_1.7.0_04(由于问题#3,必须为VisualVM使用不同的版本。)
希望有帮助...