我已经花费了很长时间来加载和测试我的应用程序,现在我需要对其进行分析。但不幸的是,VisualVM在我的本地应用程序上总是显示“不支持此JVM”?
这些应用程序是在与VisualVM相同的JVM上启动的。
我已经花费了很长时间来加载和测试我的应用程序,现在我需要对其进行分析。但不幸的是,VisualVM在我的本地应用程序上总是显示“不支持此JVM”?
这些应用程序是在与VisualVM相同的JVM上启动的。
我发现(至少在Windows下)可以轻松编写小批处理文件来运行VisualVM和特定的JVM组合,这对我很重要,因为我同时安装了32位和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批处理文件解释器的特性。
-Dcom.sun.management.jmxremote
。如果您无法通过Java Mission Control(JMC)连接,则也可以使用该方法解决问题。这应该自动启用,但出于某种原因,在我的Linux上没有启用。设置此属性将注册Java VM平台的MBeans并通过私有接口发布远程方法调用(RMI)连接器,以允许JMX客户端应用程序监视本地Java平台,即在与JMX客户端运行在同一台计算机上的Java VM。
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.ssl=false
后才能正常工作。 - Anton需要使用与待分析程序相同的JVM来运行VisualVM,至少是Java 6,并且具有相同的32位/64位大小。(您还需要是相同的用户,但这则消息不适用于此情况)。
在您的情况下,我会三重检查它是否是完全相同的JVM。
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITY https://dev59.com/q3HYa4cB1Zd3GeqPLW5W#42107355
我按照以下步骤解决问题:vim /tmp/tools.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
-Djava.security.policy=/tmp/tools.policy
3) 使用sudo运行jvisualvm
$ jvisualvm --cp:a ~/luca4pro/wildfly-9.0.2.Final/bin/client/jboss-client.jar
- gersonZaragocin正如您所看到的,您正在32位JVM上运行VisualVM
您不需要卸载32位JVM。只需告诉VisualVM使用您的64位JVM。
如果您想永久更改它,可以编辑
在 visualvm_13\etc\visualvm.conf 中指定jvm路径即可
我发现的一个问题,感谢@user3356656的提示,就是如果您在计算机处于一个IP地址时启动程序,然后尝试连接到另一个IP地址,它会失败。
我曾经遇到一个问题,就是visualvm在Windows 7上无法检测到我本地安装的tomcat。我可以手动连接,但是像内存快照和visualgc插件等功能都无法使用。我确认了我使用的JVM版本、临时文件权限等都是相同的,但还是不行。后来我发现先启动visualvm,然后再启动tomcat就解决了这个问题。
我也遇到了这个问题。我的情况是在Linux上,我用tomcat_user启动了Tomcat,但我用root用户运行jvisualvm。只有在我使用root用户启动Tomcat后才能正常工作。
在我的情况下,应用程序正在以管理员权限运行。因此,VisualVM也需要作为管理员运行。