JAVA/OOM:当JAVA堆空间因OOM而崩溃时,如何转储其上的所有信息?
我是JAVA的新手。 我在JAVA实现的分布式框架上运行了一个程序 当我使用大数据时,程序会由于带有一些错误堆栈的OutOfMemory而崩溃。但是错误堆栈不包含我正在查找的信息 我想检查在堆崩溃时,哪些类型的数据结构(java对象)占用了堆空间 有什么著名的技巧、方法或工具吗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
谢谢,当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循环。如果这是一个生产应用程序,并且让您担心,请删除此选项。