我正在尝试使用VisualVM来配置我的程序,但它总是崩溃,通常会出现相同的错误消息:
Waiting...
Profiler Agent: Waiting for connection on port 5140 (Protocol version: 15)
Profiler Agent: Established connection with the tool
Profiler Agent: Local accelerated session
Starting test 0
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000c12e9d20, pid=4808, tid=11472
#
# JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C 0x00000000c12e9d20 …Run Code Online (Sandbox Code Playgroud) 我正在尝试分析一个远程 tomcat appln,它是我的登台环境。但我无法获得探查器选项卡。尝试谷歌搜索,但我无法在这里找到确切的问题。我的远程和本地 jdk 版本都相同。两者都是 java 8。我使用的是visualvm 1.3.8
我正在尝试使用 VisualVM 1.4 分析远程 JVM。我在本地运行 macOS High Sierra 10.13.6,具有以下 OpenJDK 版本:
java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.181-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
服务器运行带有以下 OpenJDK 的 Debian Stretch:
java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
当我在本地监视 JVM 进程时,我会看到所有这些选项卡,并且分析工作正常。
但是,如果我远程执行此操作,我会看到如下内容:
请注意显示“此 JVM 不支持”的 CPU 窗口和减少的选项卡,不包括“Profiler”。然而,正如你所看到的,我确实看到了一些数据。
我正在通过 进行连接jstatd。在服务器上,按照本文,我正在运行
jstatd -J-Djava.security.policy=/home/brandwatch/jstatd.all.policy -J-Djava.rmi.server.hostname=10.2.156.160 -Djava.rmi.server.logCalltrue
Run Code Online (Sandbox Code Playgroud)
像这样的答案表明这可能是由于不同的 JVM 版本造成的,但是,我的似乎是相同的,尽管其中一个运行在 MacOS 上,另一个运行在 Debian …
我正在使用以下参数运行 Java 应用程序,以启用 JMX 服务器的远程连接:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=9998
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)
我可以通过 VisualVM 成功连接到该 JMX 服务器,方法是将新的 JMX 连接添加到地址:<HOSTNAME>:9998
但是当我在 Windows Subsystem for Linux 2 (WSL2) 中运行该应用程序时,Visual VM 无法连接到localhost:9998:
连接失败
据我所知,应用程序在 WSL2 中侦听的每个端口也在主机(Windows 本身)中打开,我可以使用Win+R -> cmd -> telnet localhost 9998(连接成功)进行检查。另外,我正在 WSL2 中运行一个 nginx 实例,我可以使用localhost.
当我从Eclipse Helios启动我的Java应用程序时,我在visualVM上的本地应用程序列表中看到它.但是,我转到Profiler选项卡,我无法通过CPU或内存条件进行配置.
我收到以下消息:"警告!为此JVM启用了类共享.这可能会在分析应用程序时导致问题并最终导致崩溃.请参阅VisualVM故障排除指南以获取更多信息和解决问题的步骤:https:/ /visualvm.dev.java.net/troubleshooting.html#xshare."
在我的应用程序的eclipse启动器中,我将-Xshare:off添加到VM_Arguments但没有成功.使用的JDK:jdk 1.6.0_20 Enviornment:Windows 7,64bit
有什么建议吗?谢谢
我可以附加到万无一失的过程中,但是试图对其进行分析以示抽样:
CPU sampling:
Not available. Failed to create JMX connection to target application. Use 'Add JMX Connection' action to attach to the application.
Memory sampling:
Not available. Failed to read objects in target application. Check the logfile for details (use Help | About | Logfile).
Run Code Online (Sandbox Code Playgroud)
并尝试开始分析显示一个空的错误消息框
我一直在使用"Java VisualVM",这似乎是Oracle的品牌,而且丑陋的页面声称我运行的是verison 1.6.0_51.
特别是有一件事让我失望,我一直在运行一个过时的或某种不受欢迎的版本,这个非常流行的开发工具是更新可用的插件失败,有:
由于java.security.cert.CertificateException,无法连接到Java VisualVM插件中心:找不到与visualvm.dev.java.net匹配的主题备用DNS名称.
确实会https://visualvm.dev.java.net给出可怕的警告.
所以我去http://visualvm.dev.java.net(没有S)并下载"当前"版本,即1.3.6.现在它被称为"Visual VM",并且在GNU GPL下获得许可,并且没有Oracle品牌.它显然更好 - 关于页面设计得更好,它在打开时自动更新了一些组件,并且已经填充了可用的插件,我可以检查最新而没有错误.
这个工具的这两个版本是什么?我是如何以某种方式结束腐烂的?
我的程序中有一个错误,它产生了很多String实例(根据Heap中7000+ VisualVM).我试图找出哪个类负责这个,所以我可以理解它为什么会发生.
以下是堆转储的示例String:

我如何确定哪个类负责生成每个String?我正在和大约40个班级一起工作,所以我希望能够在可能的情况下确定罪魁祸首课程VisualVM.
我使用VisualVM创建了一个堆转储.生成的.hprof文件大约为6GB.
当我尝试在VisualVM中加载文件时,它会被卡在50%.卡住时,我正在使用的计算机上似乎没有消耗额外的资源.CPU很安静,只有大约一半的可用内存在使用,并且没有报告任何IO.
jvisualvm:坚持"加载堆转储"屏幕问一个类似的问题,但唯一的答案建议.hprof通过VisualVM 创建文件(我已经做过).
是否需要使用任何特殊设置来打开此大小的堆转储?
我在本地运行的apache tomcat 7和作为.war文件部署到此服务器的Web应用程序.我正在尝试使用visualvm来分析应用程序,但到目前为止我只能分析tomcat本身.
我能够在界面中看到关于tomcat的所有内容,并且绝对没有问题.我能够看到独立的tomcat函数,这对我来说毫无意义.
我想看到的是我部署的Web应用程序的功能的执行时间,换句话说就是我自己的代码.但我无法做到这一点?有没有人设法做这个分析?我是否需要使用已部署的应用程序设置JMX连接?下面你可以找到我能够描述tomcat功能的屏幕.
