jmap

概述

jmap命令是一个可以输出所有内存中对象的工具,甚至可以将JVM中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的所有对象的情况(如:产生哪些对象,及其数量)。


命令格式

 jmap [option] <pid>
    (to connect to running process) 连接到正在运行的进程

jmap [option] <executable <core>
    (to connect to a core file)     连接到核心文件

jmap [option] [server_id@]<remote server IP or hostname>
    (to connect to remote debug server) 连接到远程调试服务

基本命令

输出jvm的heap内容到文件

jmap -dump:live,format=b,file=[outputFileName.hprof] [pid]

使用hprof二进制形式输出jvm的heap内容到文件。live子选项是可选的,只输出活的对象到文件。


打印正等候回收的对象的信息

jmap -finalizerinfo [pid]


打印heap的概要信息

JDK 8: jmap -heap [pid]

JDK 9往后:jhsdb jmap --heap --pid [pid]

root@PC:~# jhsdb jmap --heap --pid 51266
Attaching to process ID 51266, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0.8.1+1-Ubuntu-0ubuntu122.04

using thread-local object allocation.
Garbage-First (G1) GC with 10 thread(s)

Heap Configuration: #堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]
   MinHeapFreeRatio         = 40 #最小堆可用比例
   MaxHeapFreeRatio         = 70 #最大堆可用比例
   MaxHeapSize              = 4169138176 (3976.0MB) #最大堆空间大小
   NewSize                  = 1363144 (1.2999954223632812MB) #新生代分配大小
   MaxNewSize               = 2499805184 (2384.0MB) #最大新生代分配大小
   OldSize                  = 5452592 (5.1999969482421875MB) #老年代大小
   NewRatio                 = 2 #新生代比例
   SurvivorRatio            = 8 #新生代与suvivor的比例
   MetaspaceSize            = 22020096 (21.0MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 2097152 (2.0MB)

Heap Usage: #堆使用情况【堆内存实际的使用情况】
G1 Heap:
   regions  = 1988
   capacity = 4169138176 (3976.0MB)
   used     = 38374400 (36.5966796875MB)
   free     = 4130763776 (3939.4033203125MB)
   0.9204396299673038% used
G1 Young Generation:
Eden Space:
   regions  = 3
   capacity = 117440512 (112.0MB)
   used     = 6291456 (6.0MB)
   free     = 111149056 (106.0MB)
   5.357142857142857% used
Survivor Space:
   regions  = 1
   capacity = 2097152 (2.0MB)
   used     = 2097152 (2.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 16
   capacity = 71303168 (68.0MB)
   used     = 29985792 (28.5966796875MB)
   free     = 41317376 (39.4033203125MB)
   42.05394071691177% used

打印每个class的实例数目、内存占用、类名信息

jmap -histo:live [pid]