Java 常见的三种 dump 文件: Core Dump, heap dump, thread dump
- core dump: 有时又被称作 crash dump, memory dump, system dump, 它是某个进程在某个时间点的内存镜像. 它既可以在系统发生致命错误或无法处理的错误时候自动产生, 也可以通过命令工具产生. 但是 core dump 一遍并不能包含所有的内存页,但至少包含 heap 和 stack 的内存信息. core dump 默认放在当前进程的工作文件夹,并以core.pid 命名. 使用 jmap 转换 core dump 为 HPROF 文件(jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234) 或使用 Java VisualVM 来分析都可以. 也可以在 Linux 上面用 gdb --core core.1234 来分析.
- heap dump: 内存某个时间点镜像, 有ASCII 或 binary 格式,不同格式可能包含的信息不一样. 但一般包含 heap 里的类和对象实例信息. 但不包含什么时候或什么原因对象产生.
- thread dump: The thread dump consists of the thread stack, including thread state, for all Java threads in the virtual machine. The thread dump does not terminate the application: it continues after the thread information is printed.
如何使用 Java VisualVM 来分析 core dump
转换 core dump 为 HPROF 文件
_$jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234 //这个 java 是你 core dump 运行的 java
- 如何产生 core dump
- 如何产生 heap dump or 这里 or 这里
-- 应用启动时: _$ java -agentlib:hprof=file=snapshot.hprof,format=b application
-- 应用启动时: _$ java -XX:+HeapDumpOnOutOfMemoryError application
-- _$ jcmdGC.heap_dump filename=Myheapdump
-- _$ jmap -dump:format=b,file=snapshot.jmap pid
-- 使用 JConsole 工具 - 如何产生 thread dump
-- _$ jstack -f 5824
-- use VisualVM