跳转至

java_dump命令

在 Java 运维和调试中,"dump" 主要指的是生成 Java 进程的堆内存转储(Heap Dump)、线程转储(Thread Dump)和其他诊断信息。以下是常用的生成 dump 文件的 Java 命令和工具:

1. 生成 Heap Dump(堆内存转储)

Heap Dump 是 Java 应用的内存快照,通常用于分析内存泄漏、性能问题等。

jmap

jmap 是生成堆转储的常用命令。可以通过该命令创建堆转储文件,用于内存分析工具(如 Eclipse MAT 或 VisualVM)进一步分析。

  • 命令示例
    生成堆转储文件:

    jmap -dump:format=b,file=heap_dump.hprof <PID>

  • 参数说明

  • format=b:指定转储格式为二进制格式(.hprof)。
  • file=heap_dump.hprof:指定生成的堆转储文件名。
  • <PID>:目标 Java 进程的进程 ID。

-XX:+HeapDumpOnOutOfMemoryError

当 Java 程序遇到 OutOfMemoryError 错误时,JVM 会自动生成堆转储。可以在 JVM 启动参数中配置。

  • JVM 启动参数

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof

  • 参数说明

  • -XX:+HeapDumpOnOutOfMemoryError:启用在发生 OutOfMemoryError 时生成堆转储。
  • -XX:HeapDumpPath=/path/to/heapdump.hprof:指定堆转储文件的路径。

2. 生成 Thread Dump(线程转储)

线程转储包含了 JVM 进程中所有线程的状态信息,通常用于排查线程死锁和性能问题。

jstack

jstack 可以获取指定 Java 进程的线程堆栈信息。

  • 命令示例
    生成线程转储:

    jstack <PID> > thread_dump.txt

  • 参数说明

  • <PID>:目标 Java 进程的进程 ID。
  • thread_dump.txt:输出线程转储信息的文件。

kill -3

在 Unix/Linux 系统中,向 Java 进程发送 SIGQUIT 信号(信号 3)也会生成线程转储。这个方法不需要额外的工具,直接通过系统命令实现。

  • 命令示例

    kill -3 <PID>

  • 效果
    向 Java 进程发送 SIGQUIT 信号后,JVM 会将线程转储输出到标准输出或日志文件中,通常是 stdoutcatalina.out(Tomcat 环境)。


3. 生成 Native Dump(本地转储)

本地转储包含了 JVM 崩溃时的本地代码堆栈信息,通常用于 JVM 崩溃时的调试。

-XX:+CreateMinidumpOnCrash

当 JVM 崩溃时,生成最小的本地转储(MiniDump)文件。

  • JVM 启动参数
    -XX:+CreateMinidumpOnCrash

-XX:NativeMemoryTracking=summary

启用本地内存追踪,帮助分析内存分配情况。

  • JVM 启动参数
    -XX:NativeMemoryTracking=summary

4. 生成 Class Dump(类转储)

类转储用于查看 JVM 加载的类信息。

-XX:+UnlockDiagnosticVMOptions -XX:+PrintLoadedClasses

通过 JVM 启动参数,可以打印出 JVM 加载的所有类的信息。

  • JVM 启动参数
    -XX:+UnlockDiagnosticVMOptions -XX:+PrintLoadedClasses

5. 其他调试 Dump 命令

jcmd

jcmd 提供了更灵活的诊断命令,可以生成多个不同类型的 dump 文件。

  • 命令示例
    jcmd <PID> GC.heap_info    # 查看堆内存信息
    jcmd <PID> VM.native_memory summary  # 查看本地内存使用情况
    jcmd <PID> Thread.print     # 打印线程堆栈信息

6. JVM 配置项

  • -XX:HeapDumpPath=<path>:指定生成堆转储文件的路径。
  • -XX:+HeapDumpOnOutOfMemoryError:当发生 OutOfMemoryError 时自动生成堆转储。