作用

jmap全称Java Memory Map,用来展示对象内存映射或堆内存详细信息。

TIPS

  • 此命令是实验性的,不受支持,对于JDK9及更高版本,部分功能可使用 jhsdb jmap 代替,也可用jcmd代替。
  • 部分JDK版本的jmap命令对Windows支持比较有限,参数较少。本文为了更加接近生产环境,都是基于类Unix操作系统编写的。如果在Windows操作系统下测试,应以jmap -h的结果为准。

参考文档

使用说明

命令如下:

➜  jmap -h
Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:live] <pid>
        to connect to running process and print histogram of java object heap
        if the "live" suboption is specified, only count live objects
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message

    dump-options:
      live         dump only live objects; if not specified,
                   all objects in the heap are dumped.
      format=b     binary format
      file=<file>  dump heap to <file>

    Example: jmap -dump:live,format=b,file=heap.bin <pid>

命令格式:

jmap [options] pid

options的可选项如下:

  • -clstats:连接到正在运行的进程,并打印Java堆的类加载器统计信息
  • -finalizerinfo:连接到正在运行的进程,并打印等待finalization的对象的信息
  • -histo[:live]:连接到正在运行的进程,并打印Java堆的直方图。如果指定了live子选项,则仅统计活动对象
  • -dump:dump_options:连接到正在运行的进程,并转储Java堆。其中,dump_options的取值为:
    • live:指定时,仅Dump活动对象;如果未指定,则转储堆中的所有对象
    • format=b:以hprof格式Dump堆
    • file=filename:将堆Dump到filename

使用示例

# 展示63120进程的类加载统计信息
jmap -clstats 63120

# 展示63120进程中等待finalization的对象的信息
jmap -finalizerinfo 63120

# 展示63120进程中堆的直方图
jmap -histo 63120

# 展示63120进程堆中存活对象的直方图
jmap -histo:live 63120

# Dump 63120这个进程中的存货对象的堆到dump.hprof文件
jmap -dump:live,format=b,file=dump.hprof 63120

拓展知识

要想获取Java堆Dump,除使用jmap外,还有以下方法:

  • 使用-XX:+HeapDumpOnOutOfMemoryError,让虚拟机在OOM异常出现后自动生成堆Dump文件;
  • 使用-XX:+HeapDumpOnCtrlBreak,可使用[Ctrl]+[Break],让虚拟机生成堆Dump文件;
  • 在Linux操作系统下,发送 kill -3 pid 命令;
  • 对于Spring Boot应用,也可以使用Spring Boot Actuator提供的/actuator/heapdump实现堆Dump。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

总有那些风吹不散的Coding