我已经花了很长时间来加载和测试我的应用程序,现在我需要对其进行分析。但不幸的是,VisualVM总是在我的本地应用程序上说“不支持这个JVM”?
应用程序是在与VisualVM相同的JVM上启动的。
答案 0 :(得分:14)
我发现(至少在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批处理文件解释器的功能。
答案 1 :(得分:11)
VisualVM需要使用相同的JVM运行 - 至少是具有相同32位/ 64位大小的Java 6 - 与要分析的程序一样。 (您还需要是同一个用户,但此消息不适用)。
我会三重检查它是你情况下完全相同的JVM。
答案 2 :(得分:11)
就我而言,即使JVM匹配(均为64位),使事情正常工作的唯一方法是将参数-Dcom.sun.management.jmxremote
发送到要监视的JVM。如果您通过Java Mission Control(JMC)进行连接时遇到问题,这也很有效。
根据JMX's documentation,这就是论证的作用:
设置此属性会注册Java VM平台的MBean并通过专用接口发布远程方法调用(RMI)连接器,以允许JMX客户端应用程序监视本地Java平台,即在同一台计算机上运行的Java VM。 JMX客户端。
这应该是自动启用的,但由于某种原因,它不在我的Linux上。
答案 3 :(得分:3)
在Linux上: 确保/ etc / hosts正确引用“主机名”的有效IP地址 似乎这里的差异完全混淆了可怜的jvisualvm及其程序员。
答案 4 :(得分:2)
由于来自@ user3356656的提示,我刚刚发现的一个问题是,如果您在计算机位于一个IP上时启动程序,然后尝试连接,而它位于不同的IP上,则会失败。
答案 5 :(得分:2)
我也遇到过这个问题。我的情况是在linux上,我用tomcat_user启动了tomcat但是我用root用户运行了jvisualvm。我用root用户启动tomcat后就可以了。
答案 6 :(得分:2)
我遇到了在Windows 7上使用visualvm检测我的本地tomcat安装的问题。我可以手动连接,但之后没有启用内存快照和visualgc插件等内容。我确认我使用的是相同的JVM版本,临时文件权限等。没有用。然后我发现首先启动visualvm,然后是tomcat,解决了这个问题。
答案 7 :(得分:2)
如您所见,您在32位JVM上运行VisualVM
您不需要取消同步32位JVM。告诉VisualVM使用tour 64bit JVM。
如果您想永久更改,可以编辑
在 visualvm_13 \ etc \ visualvm.conf 中并在此处指定jvm的路径
答案 8 :(得分:1)
我可以重现下一个行为。 我有一个带有右键菜单项的java应用程序来打开jvisualvm。 我将这个java应用程序作为bat文件中的独立安装程序运行。 这意味着我修改%path%和其他所需的环境变量,如JDK 因此形成我的环境。 启动应用程序的BAT标记为非管理员运行。环境指向64位JDK。 然后我启动其他java应用程序作为管理员。 VM从同一个64位JDK源生存。 然后我从第一个应用程序启动jvisualvm,右键单击ie.as non-admin。 我可以在jvisualvm'应用程序列表'中看到该应用程序,但单击'系统属性'会出错。消息是“此JVM不支持”。 公开JVM参数。
解决方案与以前的其他评论一样: 启动我右键单击jvisualvm-starter作为管理员我也可以看到"系统属性" 。 当然,如果JDK是32位而其他64位则不起作用。去过那里。
我认为这个想法需要在这里添加,因为这个小半工作的混蛋正在进行中。
答案 9 :(得分:1)
我也为本地tomcat遇到了同样的问题,我搜索了stackoverflow的解决方案。经过一些严肃的调试后,我发现VisualGC没有权限从tool.jar文件中获取GC信息。
通过链接
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITY https://stackoverflow.com/a/42107355/3876619
我按照以下步骤解决问题
1)创建权限文件
vim /tmp/tools.policy
添加
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
保存
2)现在将/tmp/tools.policy添加到JVM启动参数
-Djava.security.policy=/tmp/tools.policy
3)使用sudo运行jvisualVm
答案 10 :(得分:1)
我的问题是JVM优化 - <?php } ?>
标志将破坏VisualGC。如果jps不会在列表中显示您的应用,则很明显。
答案 11 :(得分:0)
我已将名称更改为我的Windows用户并将其全部设置为小写,重新启动我的电脑,现在一切正常。
答案 12 :(得分:0)
对我来说,原因是我使用JVM进程与不同的用户运行“jstatd”。我在linux中有一个特殊的用户来启动JVM线程(它是一个tomcat),但是我用root启动了jstatd进程。如果使用root运行jps,则无法看到属于其他用户的JVM线程的任何信息。那是麻烦。 我杀死了由root启动的“jstatd”进程,su给了JVM进程的所有者,并重启了“jstatd”进程,现在一切都很好。
答案 13 :(得分:0)
就我而言,该应用程序以管理员权限运行。因此,visualVM也需要以管理员身份运行。