【问题标题】:Java VisualVM missing featuresJava VisualVM 缺少的功能
【发布时间】:2013-12-14 12:29:39
【问题描述】:

我有一个 Java 应用程序,我想使用 Java VisualVM (jvisualvm) 对其进行监控。

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

这是它的截图,以及我编写的另一个测试应用程序:

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

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

我还尝试单击测试应用程序中的按钮,直到出现OutOfMemoryError。没有堆转储;这并不奇怪,因为 OOME 上的堆转储已禁用。

我能做些什么来解决这个问题?

【问题讨论】:

  • 您可以在可视虚拟机中进行堆转储。
  • 我的意思是堆转储按钮有效。但是请注意,对于大型堆(例如 > 500MB/1GB),这将需要一些时间。你可以用一小堆试一下,以确认它有效。
  • @assylias 正如您可能从图片中看到的那样,按钮被禁用、变灰、未启用,无论您想怎么称呼它。你甚至不能点击它,所以我不明白它是如何工作的。
  • 哦,我明白了。当我尝试时它已启用 - 愚蠢的问题但是:当您尝试进行堆转储时,您的程序仍在运行,对吗?你用的是什么版本的jdk?
  • @assylias 程序正在运行(图中有框架:D)。我正在使用 Java 7 更新 45。

标签: java eclipse jvisualvm heap-dump


【解决方案1】:

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

【讨论】:

    【解决方案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都正常运行了,但是问题依旧存在。

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

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

    【讨论】:

    • 我认为这可以总结如下:您使用 jre 运行 visualvm,而您应该使用 jdk(与安装 visualvm 相同的 jdk)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2018-09-17
    • 2022-01-21
    相关资源
    最近更新 更多