英文全称
Java Virtual Machine Memory Map 生成虚拟机的内存转储快照(heapdump)文件
jmap命令用于生产堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,要向获取Java堆转储快照还有一些比较”暴力“的手段:譬如-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生生成dump文件,通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成dump文件,又或者在Linux系统下通过Kill -3命令发送进程退出信号”恐吓“一下虚拟机,也能拿到dump文件。
jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前用的是那种收集器等。
命令格式
jmap [option] vmid
选项
option具体选项及作用如下:
-dump 生成Java堆转储快照。格式为:-dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize()方法的对象。只在Linux/Solaris平台下有效
-heap 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效
-histo 显示堆中对象统计信息,包括类、实例数量和合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效
示例
Tips :需要有JDK环境
- -dump 生成java堆转储快照
[root@iZbp13vdh76h8tevitqolvZ jvm]# jps -l
8134 sun.tools.jps.Jps
25273 org.apache.catalina.startup.Bootstrap
1914 com.aliyun.tianji.cloudmonitor.Application
[root@iZbp13vdh76h8tevitqolvZ jvm]# jmap -dump:format=b,file=jmap.bin 25273
Dumping heap to /usr/local/learn/jvm/jmap.bin ...
Heap dump file created
[root@iZbp13vdh76h8tevitqolvZ jvm]# ll
total 29736
-rw------- 1 root root 30446864 Jun 17 08:49 jmap.bin
使用jmap生成一个正在运行的tomcat的dump快照文件的例子,25273为jps查询到的LVMID
- -histo 显示堆中对象统计信息,包括类、实例数量和合计容量
[root@iZbp13vdh76h8tevitqolvZ ~]# jmap -histo 25273|more
num #instances #bytes class name
----------------------------------------------
1: 19039 9157264 [B
2: 35660 6488016 [C
3: 7602 1003112 [I
4: 34069 817656 java.lang.String
5: 13756 550240 java.util.TreeMap$Entry
6: 10135 405400 java.util.HashMap$KeyIterator
7: 3172 362048 java.lang.Class
8: 11184 357888 java.util.HashMap$Node
9: 3518 309584 java.lang.reflect.Method
10: 5149 232328 [Ljava.lang.String;
11: 3409 214960 [Ljava.lang.Object;
12: 959 157296 [Ljava.util.HashMap$Node;
13: 4863 155616 java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
14: 4402 140864 java.io.File
15: 4190 134080 java.util.concurrent.ConcurrentHashMap$Node
16: 2415 96600 java.util.HashMap$ValueIterator
17: 4678 74848 java.lang.Object
18: 967 69624 java.util.regex.Pattern
19: 1613 64520 java.util.LinkedHashMap$Entry
20: 1238 59424 java.util.HashMap
21: 2415 57960 org.apache.catalina.LifecycleEvent
22: 966 54096 [Ljava.util.regex.Pattern$GroupHead;
23: 2192 52608 java.util.ArrayList
24: 1293 51720 java.lang.ref.Finalizer
25: 2415 50232 [Lorg.apache.catalina.Container;
26: 2312 48520 [Ljava.lang.Class;
27: 549 43920 java.lang.reflect.Constructor
28: 1358 43456 java.util.Hashtable$Entry
29: 60 42848 [Ljava.util.concurrent.ConcurrentHashMap$Node;
30: 859 41232 org.apache.tomcat.util.modeler.AttributeInfo
31: 10 41120 [Ljava.nio.ByteBuffer;
32: 861 34440 java.lang.ref.SoftReference
33: 30 31200 [[C
34: 549 30744 java.util.zip.ZipFile$ZipFileInputStream
35: 546 30576 java.util.zip.ZipFile$ZipFileInflaterInputStream
36: 508 24384 java.util.TreeMap
37: 968 23232 java.util.regex.Pattern$Single
38: 967 23208 java.util.regex.Pattern$Start
39: 966 23184 java.util.regex.Pattern$TreeInfo
40: 841 20184 org.apache.tomcat.util.buf.StringCache$ByteEntry
41: 966 19320 [Lorg.apache.catalina.startup.HostConfig$DeployedApplication;
42: 601 19232 javax.management.MBeanAttributeInfo
43: 379 18192 java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
44: 243 17496 org.apache.tomcat.util.net.jsse.openssl.Cipher
45: 147 16464 sun.nio.ch.SocketChannelImpl
- -heap 显示Java堆详细信息
[root@iZbp13vdh76h8tevitqolvZ jvm]# jmap -heap 25273|more
Attaching to process ID 25273, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.66-b17
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 262144000 (250.0MB)
NewSize = 5570560 (5.3125MB)
MaxNewSize = 87359488 (83.3125MB)
OldSize = 11206656 (10.6875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 8192000 (7.8125MB)
used = 5356200 (5.108070373535156MB)
free = 2835800 (2.7044296264648438MB)
65.38330078125% used
Eden Space:
capacity = 7340032 (7.0MB)
used = 5062472 (4.827949523925781MB)
free = 2277560 (2.1720504760742188MB)
68.97070748465401% used
From Space:
capacity = 851968 (0.8125MB)
used = 293728 (0.280120849609375MB)
free = 558240 (0.532379150390625MB)
34.47641225961539% used
To Space:
capacity = 851968 (0.8125MB)
used = 0 (0.0MB)
free = 851968 (0.8125MB)
0.0% used
tenured generation:
capacity = 17969152 (17.13671875MB)
used = 17702584 (16.88249969482422MB)
free = 266568 (0.25421905517578125MB)
98.51652431901071% used