VisualVM内存采样:不支持远程应用程序

时间:2011-09-14 14:25:17

标签: java out-of-memory 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)

有什么我想念的东西。我对这一切都很陌生。

3 个答案:

答案 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

http://mshahriarinia.com/

答案 1 :(得分:1)

内存采样使用Attach API,它仅适用于在与VisualVM相同的用户下运行的本地应用程序。您可以在远程计算机上运行VisualVM并使用远程X会话在本地计算机上显示输出。

答案 2 :(得分:1)

按照先前的答案给出,但还有几件要承认:

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

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

  4. 使用相同的用户帐户运行目标JVM(在我的案例中为Tomcat服务器)和您的VisualVM实例

  5. 从之前的回答中,这很有用(谢谢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
    3. 一旦启动(并且您的目标JVM已经运行并且您的用户帐户与上面的#4相同),您将在VisualVM的“本地”部分中看到您的目标PID。

      我能够使用不同版本的jdk并且仍然可以看到内存采样器已启用 - 在我的情况下,目标Tomcat JVM运行jdk_1.7.0_25,而我的VisualVM实例是早期版本jdk_1.7.0_04(由于问题#3,必须为VisualVM使用不同的版本。)

      希望有帮助...