<分区>
我是JAVA新手。 我在用 JAVA 实现的分布式框架之上运行一个程序。
当我使用大数据时,程序因 OutOfMemory 而崩溃,并出现一些错误堆栈。但是错误堆栈不包含我要查找的信息。
我想检查崩溃时哪些类型的数据结构(java 对象)正在消耗堆空间。
有什么众所周知的技巧、方法或工具吗?
谢谢,
标签 java jvm out-of-memory
<分区>
我是JAVA新手。 我在用 JAVA 实现的分布式框架之上运行一个程序。
当我使用大数据时,程序因 OutOfMemory 而崩溃,并出现一些错误堆栈。但是错误堆栈不包含我要查找的信息。
我想检查崩溃时哪些类型的数据结构(java 对象)正在消耗堆空间。
有什么众所周知的技巧、方法或工具吗?
谢谢,
最佳答案
使用 HeapDumpOnOutOfMemoryError
和 HeapDumpPath
OutOfMemoryError
时生成堆转储的选项发生在 JVM 中。
例如:
$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path MyApp
如果怀疑内存泄漏,可以使用jmap
,它包含在 JDK 中,用于在您的应用程序运行时生成堆转储。
例如:
jmap -dump:live,format=b,file=dump.hprof <pid>
然后你可以分析dump.hprof
使用 YourKit 等应用程序查明导致泄漏的代码。
引用资料
关于Java/OOM : How to dump all information on java heap space when it crashes due to OOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179999/