如何在内存不足错误上进行线程转储

时间:2013-03-03 23:02:38

标签: java jvm out-of-memory sun

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

线程转储有什么类似的吗?如果服务器上发生错误,我需要这样做 - 当它发生时我没有访问权限

1 个答案:

答案 0 :(得分:3)

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

无论如何,请看this older post解决同一问题。

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