我正在运行Netbeans 11的Linux 64位计算机(32 GB的RAM,8个虚拟CPU)与Open JDK 11。我想分析一个应用程序(这是一个索引器的SOLR),因为在生产运行了很长一段时间后,我得到了内存不足的错误,我看到使用的内存(由操作系统报告)不断增加,而不是减少。它从8 8GB开始,经过几天(有时是几周),达到30 8GB,并抛出OOM (Java堆空间)。
我不能在我的开发机器(16 GB RAM,4个CPU)上重现这个OOM,所以我决定使用Netbeans profiler,看看我是否可以获得一些线索,了解是什么导致RAM消耗随着时间的推移而增加。
我开始关注Netbeans article,并在两个索引过程后看到了以下内容(实际上在生产服务器上,索引过程将无限成功,但有些索引过程可能会持续几天或几周):
所以我猜我的应用程序中有一个内存泄漏。到目前一切尚好。但在上面提到的Netbeans文章中,他们告诉您“将分析模式切换到内存模式”(在“发现源代码”一章中)。但我找不到该切换到记忆的地方。下面是我的GUI的外观:
如果我点击"Profile objects“,那么我看到的内容与文章中显示的内容很接近,但只有"Live bytes”和"Live Objects“。因此,没有提到“世代”,因为它们显示,右上角的小箭头没有提供它作为选择(只提供“名称”,“实时字节”,“实时对象”)。
因此,我是在正确的位置,如果是这样,我如何才能获得其他列("Avg Age","Generations",...)然后,我如何才能找到导致源代码中内存泄漏的部分呢?或者,是否有人能给出另一篇更详细的文章/教程(对于新手),关于如何分析应用程序以发现内存泄漏?
非常感谢任何帮助:-)!
发布于 2020-06-15 12:25:34
因此,要获得"Surviving generations metrics“在article中的显示,您必须选择"Object”,然后在"Profile“中选择一个"Focused (Instrumented)”选项,并选中"Track only live objects“,如Netbeans' wiki中所述。
https://stackoverflow.com/questions/62332123
复制相似问题