JAVA / OOM:如何在因OOM崩溃而丢弃Java堆空间的所有信息?

时间:2017-07-19 02:33:57

标签: java jvm out-of-memory

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

当我使用大数据时,程序因OutOfMemory崩溃并出现一些错误堆栈。但是错误堆栈不包含我正在寻找的信息。

我想检查崩溃时哪些类型的数据结构(java对象)正在消耗堆空间。

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

谢谢,

1 个答案:

答案 0 :(得分:2)

在JVM中发生HeapDumpOnOutOfMemoryError时,使用HeapDumpPathOutOfMemoryError选项生成堆转储。

例如:

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

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

例如:

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