java - 如何分析具有常见泄漏嫌疑的heapdump

标签 java object heap-dump

应用程序遇到缓慢问题并生成一些 heapdump 文件,heapdump 文件为 1.2GB,我需要运行我的 ha456.jar > 使用8.4GB RAM只能打开heapdump。

在此之前,当我分析heapdump时,我会尝试查看较大的LeakSize并检查Leak Suspect值,我可以看到是哪个类或我的应用程序的哪种方法持有大内存。然后我会尝试修复代码,使其能够以更好的性能运行。

这次,我无法真正弄清楚应用程序的哪个模块/方法导致了内存不足问题。以下是我的 HeapAnalyzer 的一些屏幕截图:

enter image description here

enter image description here

enter image description here

对我来说,它只是普通的类,例如 java/lang/object、java/lang/Long 或 java/util/HashMap。我真的不知道我的应用程序的哪个方法导致内存不足。

感谢您就如何对此进行分析的建议。

最佳答案

对于任何接触代码的人来说,查找内存泄漏总是非常困难的,更不用说到目前为止了。所以我只能给你一些建议:

  1. 您获得了一个堆转储,按您自己的对象进行过滤并分析谁创建了最多的对象
  2. 运行您的应用程序并使用 VisualVM 对其进行监控,稍微使用一下该应用程序,然后强制运行 GC...十分之九的对象数量没有明显减少或没有完全重置的对象就是内存泄漏

关于java - 如何分析具有常见泄漏嫌疑的heapdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572585/

相关文章:

javascript - 数组元素和对象属性比较返回 false

java - 在未捕获的异常上生成 Java 堆转储

java - Tomcat:将端口从 8080 更改为 80 不起作用

java - 我如何用java制作蛇与梯子游戏的棋盘?

java - 我们如何在 Solr 中获取集群级别的指标?

java - 无法从 Idea for Java 9 运行 maven 安装(未找到 tools.jar)

java - 对象类型和引用类型之间真的很困惑

javascript - 记录嵌套对象属性的 JS 函数,其中属性作为参数传递

jvm - Java 堆转储权限

c++ - 处理数组