java - 如何在内存不足错误时进行线程转储

原文 标签 java jvm out-of-memory sun

这个问题在这里已经有了答案:





how to generate thread dump java on out of memory error

(6 个回答)


9年前关闭。




我知道-XX:+HeapDumpOnOutOfMemoryError将在 OutOfMemoryError 上启用堆转储。

线程转储有类似的东西吗?我需要这个以防服务器上发生错误 - 发生错误时我无权访问进程本身

最佳答案

引发 OutOfMemoryError 的确切执行点非常随机(除非您有一个单线程应用程序),所以我认为在 OOM 上获取线程转储没有太大意义。如果它是“Java 堆空间”类型的 OOM,至少这是正确的,但可能也适用于其他类型的 OOM 错误。

无论如何,看看this older post解决同样的问题。

然而,解决 OOM 错误的更好方法是使用 Eclipse Memory Analyzer Tool检查堆转储。它通过将对象图转换为所谓的 dominator tree 来帮助您识别内存泄漏。 .这种结构揭示了对象之间的保持 Activity 依赖关系,因此很容易识别负责保留最大内存块的对象(参见Shallow vs. Retained Heap)。

关于java - 如何在内存不足错误时进行线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191999/

相关文章:

java - Spring 中的模块集成和安全性

java - JVM 在哪里存储原始变量?

java - 如果 jar 已经在运行,是否阻止它运行?

powershell - 可以在Powershell脚本中以%或兆字节为单位设置最大内存消耗吗?

Python - 减少大型 CSV 文件的导入和解析时间

java - 如何阅读MP3

java - 使用注释的CAS身份验证

java - 如何处理过滤器中抛出的异常?

java map dot put在for循环中不起作用

apache-spark - spark UI 对应用程序的内存使用有什么影响?