4

我正在尝试在 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)

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

4

3 回答 3

4

您可以通过以下方式解决此错误

$ ssh -Y 用户@remotemachine

$ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_135.zip

$解压缩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/

于 2013-05-02T04:15:29.127 回答
2

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

于 2011-09-14T19:14:17.250 回答
1

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

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

    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 使用不同的版本)。

希望有帮助...

于 2013-08-14T18:07:29.347 回答