为什么 VisualVM 探查器不分析我的应用程序?

2022-09-01 06:43:58

我创建了一个简单的1文件java应用程序,该应用程序可以循环访问,调用一些函数,分配一些内存,添加一些数字等。我通过eclipse的运行该应用程序。Run As->Java Application

正在运行的应用程序显示在 Java VisualVM 中的 。Local

我双击该应用程序,然后转到“探查器”选项卡。

默认设置为:

Start profiling from classes: my.main.package.**

Do not profile classes: java.*, javax.*, sun.*, sunw.*, com.sun.*

我点击.和 按钮灰显。没有任何反应。CPUCPUMemory

说.Statusprofiling inactive

当我的应用程序终止时,说.Statusapplication terminated

我在这里做错了什么?是否有一些设置需要调整?启动应用程序时是否需要设置 VM 标志?


答案 1

我在java 1.7.0_45更新后遇到了同样的问题。我不得不删除以下文件夹:

C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

这样做之后,一切都像魅力一样工作。


答案 2

我猜这个问题与从Eclipse内部启动的应用程序有关,这是因为JVisualVM期望在目录中查找数据(通常在Windows系统上)。java.io.tmpdirC:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username]

假设Eclipse不是在JPS,JVisualVM等期望的正常位置,而是将数据放在它自己的临时文件夹中?

如果是这样,请尝试调用 JVisualVM using 来显式告诉它该数据的位置。jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory]

如果找不到该文件夹,请尝试以通常的命令行 Java 方式在 Eclipse 外部运行应用程序。hsperfdata_$USER

另请注意,在 1.6.0_23 左右引入了一个影响临时文件夹(区分大小写)的错误,所以也许更新到更新的 Java 6(或 7)版本会对您有所帮助?