JAVA/OOM:当Java堆空间由于OOM而崩溃时,如何转储所有信息?



我是JAVA的新手。 我在用JAVA实现的分布式框架上运行一个程序。

当我使用大数据时,程序由于内存不足而崩溃,并带有一些错误堆栈。但是错误堆栈不包含我正在寻找的信息。

我想检查在崩溃时,什么样的数据结构(java对象(正在消耗堆空间。

是否有任何众所周知的技巧、方法或工具?

谢谢

使用HeapDumpOnOutOfMemoryErrorHeapDumpPath选项在 JVM 中发生OutOfMemoryError时生成堆转储。

例如:

$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path MyApp

如果怀疑内存泄漏,可以使用 JDK 附带的jmap在应用程序运行时生成应用程序的堆转储。

例如:

jmap -dump:live,format=b,file=dump.hprof <pid>

然后,您可以使用 YourKit 等应用程序分析dump.hprof,以查明导致泄漏的代码。

引用

  1. https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/clopts001.html

  2. https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr014.html

最新更新