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