我创建了一个简单的1文件java应用程序,它循环遍历循环,调用一些函数,分配一些内存,添加一些数字等等。我通过eclipse的Run As->Java Application
运行该应用程序。
正在运行的应用程序显示在Local
下的Java VisualVM中。
我双击该应用程序并转到Profiler选项卡。
默认设置为:
Start profiling from classes: my.main.package.**
Do not profile classes: java.*, javax.*,
sun.*, sunw.*, com.sun.*
我点击CPU
。 CPU
和Memory
按钮显示为灰色。没有任何事情发生。
Status
说profiling inactive
。
当我的申请终止时Status
说application terminated
。
我在这里做错了什么?我需要调整一些设置吗?启动应用程序时是否需要设置VM标志?
答案 0 :(得分:33)
我在java 1.7.0_45更新后遇到了同样的问题。我不得不删除以下文件夹:
C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'
这样做之后,一切都像魅力一样。
答案 1 :(得分:21)
我猜这个问题与从Eclipse中启动的应用程序有关,这是因为JVisualVM希望在java.io.tmpdir
目录中找到数据(通常是C:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username]
在Windows系统上)。
我假设而不是JPS,JVisualVM等期望的正常位置,Eclipse将数据放入其自己的临时文件夹中?
如果是这样,请尝试使用jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory]
调用JVisualVM来明确告诉它数据的位置。
如果找不到hsperfdata_$USER
文件夹,请尝试以通常的命令行Java方式在Eclipse外部运行应用程序。
另请注意,在1.6.0_23附近引入了一个影响临时文件夹(区分大小写)的错误,所以也许您可以通过更新到更新的Java 6(或7)版本来获益?
答案 2 :(得分:2)
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就可以了。
答案 3 :(得分:1)
我遇到了同样的问题,但有以下症状:
我启动了jetty,工作目录在 C:\ Users \用户t852124 \应用程序数据\本地\温度
Jetty正在创建hsperfdata_目录,但没有在其中设置processID
因此,当我启动visualVM时,它无法获取任何java进程信息。
我通过使用-Djava.io.tmpdir = C:/ temp / java选项启动jetty来解决这个问题。
现在,当我启动jetty时,进程ID在hsperfdata_目录中创建为文件。 因此,当我启动visualVM时,它能够看到我的本地java进程
答案 4 :(得分:0)
在使用VisualVM 1.3.3的Linux上我必须删除~/.visualvm/1.3.3/
中的应用程序的本地设置以启用CPU Profiler和CPU采样器。
另请注意,/ usr / bin / jvisualvm包含OpenJDK的硬编码路径(使用jdkhome
变量设置),与运行Oracle JDK 1.7相比,这似乎会导致很多问题。
答案 5 :(得分:0)
我遇到了同样的问题,并且使用提升的权限(管理员权限)运行VisualVM解决了这个问题。
答案 6 :(得分:0)
另请注意,如果您的应用程序使用的是最近的非Oracle JVM,则可能需要下载"bleeding edge" VisualVM from github。
例如,与JDK 1.8.0.111捆绑在一起的VisualVM似乎不能与IBM 1.8 JVM一起使用。 IBM JVM可能只是在Oracle 1.8 JVM之后发布,因此当时不可能包含必要的更改。