VisualVM 在所有本地应用程序上都“不支持此 JVM”?
我已经花了很长时间来加载和测试我的应用程序,现在我需要分析它。但不幸的是,VisualVM总是在我的本地应用程序上说“不支持此JVM”?
这些应用程序是在与 VisualVM 相同的 JVM 上启动的。
我已经花了很长时间来加载和测试我的应用程序,现在我需要分析它。但不幸的是,VisualVM总是在我的本地应用程序上说“不支持此JVM”?
这些应用程序是在与 VisualVM 相同的 JVM 上启动的。
我发现(至少在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_64.bat:
@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:\Program Files\Java\jdk1.7.0_07"
显然,所有路径在您的系统上可能不同,但一般的想法仍然应该正常工作(在所有64位版本的Windows上)。这样做的好处是,当我想将 VisualVM 与在 32 位 JVM 上运行的 Java 应用程序结合使用时,可以使用 32 位批处理文件,而对于 64 位,依此类推。
“start”命令的唯一好处是批处理文件无需等待应用程序完成即可启动应用程序,因此命令提示符窗口会立即关闭。这不是 VisualVM 的功能,而是 Windows 批处理文件解释器的功能。
在我的情况下,即使使用JVM匹配(都是64位),使事情正常工作的唯一方法是将参数发送到要监视的JVM。如果您在通过Java任务控制(JMC)进行连接时遇到问题,这也有效。-Dcom.sun.management.jmxremote
根据JMX的文档,这个参数的作用是:
设置此属性将注册 Java VM 平台的 MBeans,并通过专用接口发布远程方法调用 (RMI) 连接器,以允许 JMX 客户机应用程序监视本地 Java 平台,即与 JMX 客户机在同一台机器上运行的 Java VM。
这应该是自动启用的,但由于某种原因,它不在我的Linux上。