所有本地应用程序都"不支持此JVM"的VisualVM?

Loc*_*han 43 java profiler visualvm

我已经花了很长时间来加载和测试我的应用程序,现在我需要对其进行分析.但不幸的是,VisualVM总是在我的本地应用程序上说"不支持这个JVM"?

应用程序在与VisualVM相同的JVM上启动.

小智 16

我发现(至少在Windows下)可以轻松编写小批量文件来运行VisualVM并结合特定的JVM,这对我来说很重要,因为我已经安装了32位JDK和64位JDK(我需要两者,所以这对我来说是明智的).我在"S:\ applications\visualvm\bin \"文件夹中创建了两个批处理文件:

run_32.bat:

@echo off
START "VisualVM 32" visualvm.exe --jdkhome "C:\Program Files (x86)\Java\jdk1.7.0_07"
Run Code Online (Sandbox Code Playgroud)

run_64.bat:

@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.7.0_07"
Run Code Online (Sandbox Code Playgroud)

显然,所有路径可能在您的系统上有所不同,但总体思路仍应正常工作(在所有64位版本的Windows上).当我想将VisualVM与在32位JVM上运行的Java应用程序结合使用时,我可以使用32位批处理文件,以此类推64位.

"start"命令具有批处理文件启动应用程序而不等待它完成的唯一好处,因此命令提示符窗口立即关闭.这不是VisualVM的功能,而是Windows批处理文件解释器的功能.

  • 如果应用程序和VisualVM正在通过完全相同的JVM运行,该怎么办? (2认同)

Tho*_*sen 11

VisualVM需要使用相同的JVM运行 - 至少是具有相同32位/ 64位大小的Java 6 - 与要分析的程序一样.(您还需要是同一个用户,但此消息不适用).

我会三重检查它是你的情况下完全相同的JVM.


Raf*_*ael 11

在我的情况下,即使JVM匹配(都是64位),使事情正常工作的唯一方法是将参数发送-Dcom.sun.management.jmxremote到要监视的JVM.如果您通过Java Mission Control(JMC)进行连接时遇到问题,这也可以.

根据JMX的文档,这个论点的作用是什么:

设置此属性会注册Java VM平台的MBean并通过专用接口发布远程方法调用(RMI)连接器,以允许JMX客户端应用程序监视本地Java平台,即与JMX客户端在同一台计算机上运行的Java VM .

这应该是自动启用的,但由于某种原因它不在我的Linux上.