JVisualVM内存采样:不支持远程应用程序
我正在尝试使用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)
有什么我想念的东西。 我对这一切都很陌生。
内存采样使用Attach API ,它仅适用于在与VisualVM相同的用户下运行的本地应用程序。 您可以在远程计算机上运行VisualVM并使用远程X会话在本地计算机上显示输出。
您可以解决此错误
$ 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实例将是全function的,包括内存和CPU采样。
在这里阅读更多相关信息: http : //shahriarinia.blogspot.com/2013/05/java-cpumemory-heap-usage-monitoring.html
按照先前给出的答案,但还有一些额外的部分要承认:
- 无法远程采样内存
- 使用X运行VisualVM的local-to-jvm实例并将DISPLAY导出回工作站
-
jdk_1.7.0_25存在一些令人讨厌的问题,至少在我的情况下,在CentOS下导致尝试运行jvisualvm或下载的VisualVM的exception:
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使用不同的版本)。
希望有帮助……