Java VisualVM缺少功能

时间:2013-12-14 12:29:39

标签: java eclipse jvisualvm heap-dump

我有一个Java应用程序,我想使用Java VisualVM(jvisualvm)监视它。

但是,在VisualVM窗口中可以看到很少的数据。另外,我不能进行堆转储。

以下是我写的另一个测试应用程序的截图:

screenshot

我可以监视内存使用情况,加载的类和线程。堆转储,执行GC以及取样都被禁用。

我已尝试将-Dcom.sun.management.jxmremote添加到VM参数,如here所述。这将显示在“安装详细信息”窗口中。但是,它不会出现在Java进程参数中。 (应该吗?)

screenshots

我还尝试点击测试应用中的按钮,直到OutOfMemoryError发生。没有堆转储;因为OOME上的堆转储已被禁用,这并不奇怪。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:3)

我遇到了这个问题,因为我从与目标进程不同的JRE / JDK安装运行JVisualVM。似乎两者必须来自同一个地方,或者它会使堆转储按钮变灰。

答案 1 :(得分:2)

似乎不同的Java版本存在问题。

长话短说:如果JDK过时,请重新安装,并从C:\Windows\System32C:\Windows\SysWOW64删除Java可执行文件。

首先,我想告诉你我的计算机上有多个版本的Java。我的JDK是32位的,因为有些驱动程序没有运行64位Java。此外,我安装了32位和64位JRE,后者为Java游戏提供了更好的性能。

我的JDK是版本7,更新40. VisualVM也是那个版本。但是,我的自动更新JRE是版本7,更新45。

java -version告诉我它是版本45(它是),所以我没有想到问题就在那里。

然后,我通过控制面板检查了版本。我现在知道我的JDK已经过时了,所以我卸载它并重新加载它。

从系统路径中卸载已删除的Java,因此jvisualvm将无法运行。我把它添加到路径中。现在app和VisualVM都正常运行,但问题仍然存在。

最后一个问题是系统使用的是来自java.exe的{​​{1}}而不是JDK的C:\Windows\System32。到目前为止它似乎是最新的,但可能是JRE安装在与VisualVM(= JDK)不同的位置。

最后,我刚刚删除了C:\Windows\System32C:\Windows\SysWOW64中的Java可执行文件。