首页 > 解决方案 > 如何在 Netbeans 11 的分析器中将分析模式切换到内存模式?

问题描述

我正在使用 Open JDK 11 在 Linux 64 位机器(32 GB RAM,8 个虚拟 CPU)上运行 Netbeans 11。我想分析一个应用程序(这是 SOLR 的索引器),因为经过长时间的生产运行后我得到Out Of Memory 错误,我看到已用内存(由操作系统报告)不断增加且从未减少。它从 8GB 开始,几天(有时是几周)后,达到 30GB 并引发 OOM(Java 堆空间)。

我无法在我的开发机器(16 GB 的 RAM,4 个 CPU)上重现这个 OOM,所以我决定使用 Netbeans 分析器,看看我是否能得到一些线索,了解导致 RAM 消耗随时间增加的原因。

我开始关注Netbeans 文章并在 2 个索引过程之后看到以下内容(实际上在生产服务器上,索引过程将无限地相互成功,但某些索引过程可能会持续数天或数周): 在我的项目中幸存几代

所以我猜我的应用程序中存在内存泄漏。到现在为止还挺好。但是在上面提到的 Netbeans 文章中,他们告诉您“将分析模式切换到内存模式”(在名为“发现源”的章节中)。但是我找不到在哪里切换到内存。这就是我的 GUI 的样子:

我的 Netbeans 分析器 GUI

如果我单击“配置文件对象”,那么我会看到与它们在文章中显示的内容相近的内容,但只有“实时字节”和“实时对象”。所以没有提到他们显示的“Generations”,右上角的小箭头也没有提供它作为选择(只有“Name”、“Live Bytes”、“Live objets”)。

对象分析

因此,我是否在正确的位置,如果是这样,我怎样才能获得其他列(“Avg Age”,“Generations”,...),然后我怎样才能转到导致源代码中内存泄漏的部分? 或者,也许有人可以建议另一篇更详细的(针对新手)文章/教程,介绍如何分析应用程序以查找内存泄漏?

非常感谢任何帮助:-)!

标签: netbeansmemory-leaksheap-profiling

解决方案


因此,要让“Surviving generation metrics”出现在他们的文章中,您必须选择“Object”,然后在“Profile”中选择“Focused (Instrumented)”选项之一,并选中“Track only live objects”如Netbeans 的 wiki中所述。

在此处输入图像描述


推荐阅读