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

| 我已经花了很长时间来加载和测试我的应用程序,现在我需要对其进行概要分析。但是不幸的是,VisualVM在本地应用程序上总是显示“此JVM不支持”。 这些应用程序是在与VisualVM相同的JVM上启动的。     
已邀请:
我发现(至少在Windows下)可以轻松编写小批处理文件以结合特定的JVM来运行VisualVM,这对我来说很重要,因为我同时安装了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批处理文件解释器的功能。     
VisualVM需要使用与要分析的程序相同的JVM(至少具有相同的32位/ 64位大小的Java 6)运行。 (您还必须是同一用户,但是此消息不适用)。 我将三遍检查您所处的环境是否是完全相同的JVM。     
就我而言,即使JVM匹配(均为64位),唯一可行的方法是将参数“ 2”发送到要监视的JVM。如果您在通过Java Mission Control(JMC)连接时遇到问题,也可以使用。 根据JMX的文档,此参数的作用是:   设置此属性将注册Java VM平台的MBean,并通过专用接口发布远程方法调用(RMI)连接器,以允许JMX客户端应用程序监视本地Java平台,即与Java虚拟机运行在同一台机器上的Java VM。 JMX客户端。 应该可以自动启用它,但是由于某种原因,它不在我的Linux上。     
在Linux上: 确保您的/ etc / hosts正确引用\“ hostname \”的有效IP地址。 看来这里的差异完全使可怜的jvisualvm及其程序员感到困惑。     
对于本地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     
由于@ user3356656的提示,我刚刚发现的一个问题是,如果在计算机位于一个IP上时启动该程序,然后在计算机位于另一个IP上时尝试连接,它将失败。     
我也遇到了这个问题。我的情况是在Linux上,我使用tomcat_user启动了tomcat,但是我以root用户运行了jvisualvm。在以root用户启动tomcat之后,它可以工作。     
我遇到的问题是visualvm在Windows 7上检测到我的本地tomcat安装。我可以手动连接,但是没有启用诸如内存快照和visualgc插件之类的东西。我确认我使用的是相同的JVM版本,临时文件权限等。没有用。然后,我发现先启动visualvm,然后再启动tomcat,即可解决问题。     
如您所见,您正在32位JVM上运行VisualVM 您无需取消安装32位JVM。只是告诉VisualVM使用浏览64位JVM。 如果要永久更改,可以进行编辑 在visualvm_13 \\ etc \\ visualvm.conf中,并在此处指定jvm的路径     
我的问题是JVM优化-
-XX:+PerfDisableSharedMem
标志将破坏VisualGC。如果jps不会在列表中显示您的应用,这是显而易见的。     
我可以重现下一个行为。 我有一个带有右键菜单项的Java应用程序,用于打开jvisualvm。 我正在从bat文件作为独立设置运行此Java应用程序。 这意味着我修改了%path%和其他所需的环境变量,例如JDK 从而形成我的环境。 启动应用程序的BAT标记为正在以非管理员身份运行。环境指向64位JDK。 然后我以管理员身份启动其他Java应用程序。 VM来自相同的64位JDK源。 然后,我从第一个应用程序中右键单击即以非管理员身份启动jvisualvm。 我可以在jvisualvm的“应用程序列表”中看到该应用程序,但是单击“系统属性”会出现错误。消息为“此JVM不支持”。 JVM参数是公开的。 解决方案与之前的其他评论类似: 以admin身份右键单击jvisualvm-starter,我也可以看到“系统属性”。 当然,如果JDK是32位的,而其他64位的,则将不起作用。到过那里。 我认为这个概念需要在这里添加。     
我已将名称更改为Windows User,并将其全部设置为小写,然后重新启动PC,现在一切正常。     
对我来说,原因是我用JVM进程的另一个用户运行了“ jstatd”。我在linux中有一个特殊的用户来启动JVM线程(这是一个tomcat),但是我用root启动jstatd进程。如果使用root运行jps,则看不到属于其他用户的JVM线程的任何信息。那是麻烦。 我杀死了以root身份启动的“ jstatd”进程,例如su到JVM进程的所有者,然后重新启动了“ jstatd”进程,现在一切正常。     

要回复问题请先登录注册