我知道这-XX:+HeapDumpOnOutOfMemoryError
将在 OutOfMemoryError 上启用堆转储。
线程转储有类似的东西吗?我需要这个以防服务器上发生错误 - 发生错误时我无权访问进程本身
我知道这-XX:+HeapDumpOnOutOfMemoryError
将在 OutOfMemoryError 上启用堆转储。
线程转储有类似的东西吗?我需要这个以防服务器上发生错误 - 发生错误时我无权访问进程本身
引发 OutOfMemoryError 的确切执行点非常随机(除非您有一个单线程应用程序),所以我认为在 OOM 上获取线程转储没有太大意义。如果它是“Java 堆空间”类型的 OOM,至少这是正确的,但也可能适用于其他类型的 OOM 错误。
无论如何,看看这个较早的帖子解决了同样的问题。
然而,解决 OOM 错误的更好方法是使用Eclipse Memory Analyzer Tool检查堆转储。它通过将对象图转换为所谓的支配树来帮助您识别内存泄漏。这种结构揭示了对象之间的保持活动依赖关系,因此很容易识别负责保留最大内存块的那些(参见Shallow vs. Retained Heap)。