我该如何在IntelliJ中分析堆转储文件?(内存泄漏)

81

我使用 jmap 工具从我的Java应用程序中生成了一个堆转储,该应用程序已经运行了几天 -> 这导致了一个大的二进制堆转储文件。

如何在 IntelliJ IDEA 中对此堆转储执行内存分析?

我知道 Eclipse 和 Netbeans 有工具,但如果可能的话,我宁愿使用 IDEA。

基本的分析结果将告诉我每个对象在内存中的实例数量,按类别排序,以便我能够开始调试内存泄漏。

8个回答

59

10
MAT 是否有 IntelliJ 的插件? - johnsam
2
不,MAT是使用Eclipse框架编写的,所以我认为很难将其插入到IntelliJ中。然而,老实说,将MAT作为独立应用程序运行可能更好。 - Rich
6
从2020.1版本开始,IntelliJ确实支持分析堆转储文件:https://www.jetbrains.com/help/idea/analyze-hprof-memory-snapshots.html - Eduard Wirch
1
我正在使用2020.2版本,但是文档中提到的内容并不存在!@EduardWirch - ericn
7
你是否使用过IntelliJ Ultimate? 根据https://www.jetbrains.com/help/idea/cpu-profiler.html,分析器是IntelliJ Ultimate的一个功能。 - Eduard Wirch
显示剩余3条评论

52

我想更新以上回答到2018年并建议同时使用VisualVM和Eclipse MAT。

如何使用:

VisualVM用于实时监控和dump heap。您还可以在其中分析堆转储文件,但是MAT拥有更多功能(例如自动分析以查找泄漏),因此我将VisualVM dump输出(.hprof文件)读入MAT。



获取VisualVM:

在此处下载VisualVM:https://visualvm.github.io/

您还需要下载Intellij的插件:enter image description here

然后您将在intellij中看到另外2个新的橙色图标:enter image description here

一旦您使用橙色图标之一运行应用程序,在VisualVM中,您会在左侧看到进程,右侧则是数据。花点时间学习这个工具,它非常强大: enter image description here



获取Eclipse的Memory Analysis Tool(MAT)独立版本:

下载链接: https://www.eclipse.org/mat/downloads.php

这是它的外观: enter image description here enter image description here

希望对你有所帮助!


17

IntelliJ IDEA 2021.2 开始,新增了一个名为“打开外部分析报告”的功能。如下图所示:

enter image description here

您可以通过以下任意一种方式查看堆转储文件:

  1. 从主菜单中选择视图(View) > 工具窗口(Tool Windows) > Profiler,然后点击打开快照(Open Snapshot)
  2. 从主菜单中选择运行(Run) > 打开 Profiler 快照(Open Profiler Snapshot) > 打开(Open)
  3. 将堆转储文件拖入 IntelliJ 窗口中

非常感谢,我会尝试这个。 - vikingsteve
谢谢,这很有帮助。我想补充一下,这只适用于IntelliJ IDEA Ultimate版本,而不适用于Community版本。 - undefined

12

1
好的,谢谢。这个插件似乎需要我在本地运行Java进程 - 是这样吗?我想从服务器导出堆转储文件,将其复制到我的本地计算机并在此处进行分析。 - vikingsteve
3
这个插件仅启动 VisualVM 并在其中打开所需的应用程序。它与你的情况无关。你可以手动启动 VisualVM 并打开转储文件。 - Meo

6

您可以运行位于 jdk/bin/jvisualvm.exe 的 "Java VisualVM" 工具。

这将打开一个GUI界面,使用 "文件" 菜单 -> "加载...",然后选择您的 *.hprof 文件。

就这样,完成了!


3
请重新表达,使用一些格式(https://stackoverflow.com/editing-help#comment-formatting)并添加一些解释。此外,即使您不喜欢帐户名称,您也可能不想讨论自己的姓名。 - Yunnosch
1
虽然我不是很了解这门语言,但我猜“done!!!”不是提议的解决方案的一部分。建议将其放在另一个地方(最好附有详细说明)。然后使用适当的格式对实际代码部分进行格式化。 - Yunnosch

5

Intellij Idea 的 VisualVM 插件

图片描述


VisualVM启动器:https://plugins.jetbrains.com/plugin/7115-visualvm-launcher - Boken

5
在插件库中还存在一个“JVM调试器内存视图”,可能会很有用。

4
该插件与 IDEA 2017.1 及之后的版本不兼容。在 IDEA 2017.1 中,内存视图可以直接使用。https://plugins.jetbrains.com/files/8537/screenshot_16824.png - kza

0

3
此插件已经过时。 - Meo
谢谢!在接受答案之前,我会调查这两个插件。 - vikingsteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接