为什么VisualVM Profiler不会配置我的应用程序?

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

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

我双击该应用程序并转到Profiler选项卡。

默认设置为:

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

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

我点击CPUCPUMemory按钮变灰。 什么都没发生。

Status表示profiling inactive

当我的应用程序终止时, Status表示application terminated

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

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

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

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

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

另请注意,在1.6.0_23周围引入了一个影响临时文件夹(区分大小写)的错误,所以也许您可以通过更新到更新的Java 6(或7)版本来获益?

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

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

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

我有同样的问题,但有以下症状:

我启动了jetty,工作目录位于C:\ Users \ t852124 \ AppData \ Local \ Temp

Jetty正在创建hsperfdata_目录,但没有在其中设置processID

因此,当我启动visualVM时,它无法获取任何java进程信息。

我通过使用-Djava.io.tmpdir = C:/ temp / java选项启动jetty来解决这个问题。

现在,当我启动jetty时,进程ID在hsperfdata_目录中创建为文件。 因此,当我启动visualVM时,它能够看到我的本地java进程

Mikaveli,Kuba和Somaiah Kumbera提供了很好的解决方案。 只需添加我所做的工作就可以了。

我首先检查了位置C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

没有以eclipse中运行的程序的进程ID命名的文件。

我只是停止了程序,并将以下参数添加到程序的运行配置中( 运行配置 – >参数 – > VM参数

-Djava.io.tmpdir=C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

我又开始了这个程序。 仍然无法描述它。 但是现在我在给定的临时目录中为该进程创建了一个文件。

然后,简单地重启VisualVM就可以了。

在使用VisualVM 1.3.3的Linux上,我必须删除~/.visualvm/1.3.3/的应用程序的本地设置以启用CPU Profiler和CPU Sampler。

另请注意,/ usr / bin / jvisualvm包含OpenJDK的硬编码路径(使用jdkhome变量设置),与运行Oracle JDK 1.7相比,这似乎会导致很多问题。

我遇到了同样的问题,并且使用提升的权限(管理员权限)运行VisualVM解决了这个问题。

另请注意,如果您的应用程序使用的是最近的非Oracle JVM,则可能需要从github下载“前沿”VisualVM 。

例如,与JDK 1.8.0.111捆绑在一起的VisualVM似乎不适用于IBM 1.8 JVM。 IBM JVM可能只是在Oracle 1.8 JVM之后发布,因此当时无法进行必要的更改。