【问题标题】:VisualVM shows "Not supported for this JVM"VisualVM 显示“此 JVM 不支持”
【发布时间】:2019-08-04 04:39:20
【问题描述】:

我正在尝试使用 VisualVM 1.4 分析远程 JVM。我在本地运行 macOS High Sierra 10.13.6,使用以下 OpenJDK 版本:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.181-b13, mixed mode)

服务器使用以下 OpenJDK 运行 Debian Stretch:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

当我在本地监控 JVM 进程时,我看到了所有这些选项卡,并且分析工作正常。

但是,如果我远程执行此操作,我会看到如下内容:

注意显示“此 JVM 不支持”的 CPU 窗口和缩小的选项卡,不包括“Profiler”。但是,如您所见,我确实看到了 一些 数据。

我正在通过jstatd 连接。在服务器上,跟随this article,我正在运行

jstatd -J-Djava.security.policy=/home/brandwatch/jstatd.all.policy -J-Djava.rmi.server.hostname=10.2.156.160 -Djava.rmi.server.logCalltrue

this 之类的答案表明这可能是由于不同的 JVM 版本造成的,但是,我的似乎是相同的,尽管其中一个在 MacOS 上运行,一个在 Debian 上运行。

【问题讨论】:

    标签: java profiling visualvm jstatd


    【解决方案1】:

    缺少 CPU 使用信息与不同的 JDK 版本无关。您看不到 CPU 使用数据,因为jvmstat(通过 jstatd 导出)不提供此类信息。如果要查看 CPU 使用率,则需要使用 JMX 连接。 JMX 还将允许您进行 CPU 和内存采样。仅本地应用程序支持分析。

    【讨论】:

    • 谢谢,这也是我一段时间后想出来的。我可以确认,CPU 使用率适用于 JMX,但 Profiling 仍然不能。
    【解决方案2】:

    因为,正如 Tomas Hurka 的回答正确表明的那样,远程分析不适用于 VisualVM,所以我使用了一些小技巧使其仍然可以工作:我已经在远程服务器上安装了 VisualVM 并通过 X-forwarding 访问它。这样,VisualVM 就可以在本地访问该进程并对其进行分析。

    1. 使用-X 标志ssh 进入服务器

      ssh -C -X <user>@<host>

    2. 下载[VisualVM 1.4][8]

      wget https://github.com/visualvm/visualvm.src/releases/download/1.4/visualvm_14.zip

    3. 解压存档

      unzip visualvm_14.zip

    4. 运行 VisualVM

      ./visualvm_14/bin/visualvm

    几秒钟后,您应该会看到一个 VisualVM 窗口弹出。它不是很快(只是因为 x-forwarding 不是),但对于我的用例来说没问题。

    实现此目的的另一种方法可能是使用 VNC,但我还没有尝试过。不利的一面是您必须安装所有桌面软件包,这在服务器上可能不需要。

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      相关资源
      最近更新 更多