Java 常见的三种 dump 文件: Core Dump, heap dump, thread dump

  1. 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 来分析.
  2. heap dump: 内存某个时间点镜像, 有ASCII 或 binary 格式,不同格式可能包含的信息不一样. 但一般包含 heap 里的类和对象实例信息. 但不包含什么时候或什么原因对象产生.
  3. 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

-- 应用启动时: _$ java -XX:+HeapDumpOnOutOfMemoryError application
-- _$ jcmd <process id/main class> GC.heap_dump filename=Myheapdump
-- _$ jmap -dump:format=b,file=snapshot.jmap pid
-- 使用 JConsole 工具

  • 如何产生 thread dump
    -- _$ jstack -f 5824

-- use VisualVM

标签: none

添加新评论