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

时间:2011-05-24 04:57:04

标签: java profiler visualvm

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

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

14 个答案:

答案 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也需要以管理员身份运行。