JAVA/OOM:当JAVA堆空间因OOM而崩溃时,如何转储其上的所有信息?

JAVA/OOM:当JAVA堆空间因OOM而崩溃时,如何转储其上的所有信息?,java,jvm,out-of-memory,Java,Jvm,Out Of Memory,我是JAVA的新手。 我在JAVA实现的分布式框架上运行了一个程序 当我使用大数据时,程序会由于带有一些错误堆栈的OutOfMemory而崩溃。但是错误堆栈不包含我正在查找的信息 我想检查在堆崩溃时,哪些类型的数据结构(java对象)占用了堆空间 有什么著名的技巧、方法或工具吗 谢谢,当JVM中发生OutOfMemoryError时,使用HeapDumpOnAutofMemoryError和HeapDumpPath选项生成堆转储 例如: $java-XX:+HeapDumpOnOutOfMemo

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

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

我想检查在堆崩溃时,哪些类型的数据结构(java对象)占用了堆空间

有什么著名的技巧、方法或工具吗


谢谢,

当JVM中发生
OutOfMemoryError
时,使用
HeapDumpOnAutofMemoryError
HeapDumpPath
选项生成堆转储

例如:

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

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

例如:

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

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

参考资料


  • 谢谢,我应该使用哪种工具来使用生成的堆转储文件?如上所述使用
    jmap
    。注意:
    live
    选项将导致整个GC循环。如果这是一个生产应用程序,并且让您担心,请删除此选项。