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

http://mshahriarinia.com/

按照先前给出的答案,但还有一些额外的部分要承认:

  1. 无法远程采样内存
  2. 使用X运行VisualVM的local-to-jvm实例并将DISPLAY导出回工作站
  3. jdk_1.7.0_25存在一些令人讨厌的问题,至少在我的情况下,在CentOS下导致尝试运行jvisualvm或下载的VisualVM的exception:

    java.lang.NoClassDefFoundError:无法初始化类sun.awt.SunToolkit

  4. 使用相同的用户帐户来运行目标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显示器返回到您需要的工作站……

  1. 本地机器:$ xhost +
  2. 远程机器:$ 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使用不同的版本)。

希望有帮助……