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