我有一个Java的应用程序,我想使用JavaVisualVM(jVisualvm
)来监控它。
但是,在VisualVM窗口中只能看到很少的数据。此外,我不能进行堆转储。
这是它的外观截图,以及我编写的另一个测试应用程序:
我可以监控内存使用、加载的类和线程。堆转储、执行GC以及采样被禁用。
我已经尝试将-Dcom.sun.management. jxmRemote
添加到VM参数中,如下所述。这显示在安装详细信息窗口中。但是,它不会出现在Java进程参数中。(应该吗?)
我还尝试单击测试应用程序中的按钮,直到发生OutOfMemoryError
。没有堆转储;这并不奇怪,因为OOME上的堆转储被禁用了。
我能做些什么来解决这个问题?
我有这个问题,因为我运行JVisualVM从不同的JRE/JDK安装比目标进程。这两个似乎必须来自同一个地方,或者它灰色的堆转储按钮。
不同的Java版本似乎有问题。
长话短说:如果JDK过时,请重新安装它,并从C:\Windows\System32
和C:\Windows\SysWOW64
中删除Java可执行文件。
首先,我想告诉你,我的电脑上有多个版本的Java。我的JDK是32位的,因为有些驱动程序不是用64位Java运行的。此外,我安装了32位和64位JRE,后者是为了Java游戏更好的性能。
我的JDK是版本7,更新40。VisualVM也是那个版本。然而,我的带有自动更新的JRE是版本7,更新45。
java-version
告诉我它是45版的,所以我认为问题不在那里。
然后,我通过控制面板检查了版本。我现在知道我的JDK已经过时了,所以我卸载并重新下载了它。
卸载从系统路径中删除了Java,因此jVisual alvm无法运行。我将其添加到路径中。现在应用程序和VisualVM都正常运行,但问题仍然存在。
最后一个问题是系统使用的是C:\Windows\System32
中的java. exe而不是JDK的。到目前为止,它似乎是最新的一个,但可能是JRE安装在与VisualVM(=JDK)不同的位置。
最后,我只是删除了C:\Windows\System32
和C:\Windows\SysWOW64
中的Java可执行文件。