Java/OOM : How to dump all information on java heap space when it crashes due to OOM?

标签 java jvm out-of-memory

<分区>

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

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

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

有什么众所周知的技巧、方法或工具吗?

谢谢,

最佳答案

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

例如:

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

如果怀疑内存泄漏,可以使用jmap ,它包含在 JDK 中,用于在您的应用程序运行时生成堆转储。

例如:

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

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

引用资料

  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

关于Java/OOM : How to dump all information on java heap space when it crashes due to OOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179999/

相关文章:

java spring命名查询和属性文件

java - 使用 SAXHandler 的 Java 中的解析器 XML 问题?

java - 解析字符串

java - 阻止java程序打开线程

python - Jython 的内存限制

java - 内存不足 - Web 应用程序

java - 我的按钮名称有问题

Java非阻塞内存分配

c# - System.Security.Policy.Evidence、Web 服务和 Blow Out the LoH

内存提升后 java.lang.ref.Finalizer OutOfMemory