netbeans - 如何在 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 的样子:
如果我单击“配置文件对象”,那么我会看到与它们在文章中显示的内容相近的内容,但只有“实时字节”和“实时对象”。所以没有提到他们显示的“Generations”,右上角的小箭头也没有提供它作为选择(只有“Name”、“Live Bytes”、“Live objets”)。
因此,我是否在正确的位置,如果是这样,我怎样才能获得其他列(“Avg Age”,“Generations”,...),然后我怎样才能转到导致源代码中内存泄漏的部分? 或者,也许有人可以建议另一篇更详细的(针对新手)文章/教程,介绍如何分析应用程序以查找内存泄漏?
非常感谢任何帮助:-)!
解决方案
因此,要让“Surviving generation metrics”出现在他们的文章中,您必须选择“Object”,然后在“Profile”中选择“Focused (Instrumented)”选项之一,并选中“Track only live objects”如Netbeans 的 wiki中所述。
推荐阅读
- excel - 如何在 Excel 中使用 VBA 函数输出填充 n 个单元格?
- r - .Rproj.user/ 是什么,我可以安全地删除它吗?
- computer-science - double 的小数部分是多少位?
- c# - 如何在 Xamarin.iOs 上使用 PaymentIntent 触发 3DSecure?
- javascript - 在 V-Data-Table 中隐藏/显示多列
- react-native - 如何编辑 TextInput 的值
- xamarin - Xamarin Frame 只有一个圆角
- matlab - 如何在 Matlab 实时脚本编辑器中显示生成的乳胶表达式?
- sql - Django找到多对多关系的完全匹配
- flutter - 如何在 Flutter 中将颜色转换为字符串?