jmap-heap pid打印heap的概要信息,GC使用的算法,heap(堆)的配置及JVM堆内存的使用情况.
[root@i-5uvhvror bin]# ./jmap -heap 17474
Attaching to process ID 17474, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration: #堆配置情况
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 8589934592 (8192.0MB) #最大堆空间大小
NewSize = 2863136768 (2730.5MB) #新生代分配大小
MaxNewSize = 2863136768 (2730.5MB) #最大可新生代分配大小
OldSize = 5726797824 (5461.5MB) #老年代大小
NewRatio = 2 #新生代比例
SurvivorRatio = 8 #新生代与suvivor的比例
MetaspaceSize = 536870912 (512.0MB) #metaspace大小
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize = 536870912 (512.0MB) #metaspace可分配最大大小
G1HeapRegionSize = 0 (0.0MB)
Heap Usage: #堆使用情况
PS Young Generation
Eden Space:
capacity = 2857893888 (2725.5MB) #伊甸区容量
used = 804328552 (767.0674819946289MB) #已经使用大
free = 2053565336 (1958.432518005371MB) #剩余容量
28.14410133900675% used #使用占比
From Space: #survior2 区
capacity = 2621440 (2.5MB)
used = 1784824 (1.7021408081054688MB)
free = 836616 (0.7978591918945312MB)
68.08563232421875% used
To Space:
capacity = 2621440 (2.5MB)
used = 0 (0.0MB)
free = 2621440 (2.5MB)
0.0% used
PS Old Generation #老年代使用情况
capacity = 5726797824 (5461.5MB)
used = 240811696 (229.6559295654297MB)
free = 5485986128 (5231.84407043457MB)
4.204997337094748% used
59801 interned Strings occupying 6904760 bytes.
jmap -histo pid 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
[root@i-5uvhvror bin]# ./jmap -histo 27682
(实例数量) (大小) (类名)
num #instances #bytes class name
----------------------------------------------
1: 14935289 1224780664 [C
2: 3099773 272780024 java.lang.reflect.Method
3: 216090 157035224 [I
4: 5637367 135296808 java.lang.String
5: 3748200 119942400 java.util.HashMap$Node
6: 4382915 100329384 [Ljava.lang.Class;
7: 3321204 79708896 java.lang.StringBuilder
8: 282980 61578112 [Ljava.util.HashMap$Node;
9: 169589 56689056 [B
10: 644178 40819208 [Ljava.lang.Object;
11: 367395 26452440 java.lang.reflect.Field
12: 111191 19611936 [Ljava.lang.reflect.Method;
13: 431776 13816832 java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
14: 393603 9446472 java.util.ArrayList
15: 184022 8833056 java.util.HashMap
16: 111062 7155368 [Ljava.lang.String;
17: 216427 6925664 java.lang.StackTraceElement
18: 184844 5915008 java.util.concurrent.ConcurrentHashMap$Node
19: 138826 5553040 java.util.LinkedHashMap$Entry
20: 331955 5311280 org.apache.ibatis.reflection.invoker.SetFieldInvoker
21: 323366 5173856 org.apache.ibatis.reflection.invoker.GetFieldInvoker
22: 81595 3916560 java.nio.HeapByteBuffer
23: 166872 3897040 [Ljava.lang.reflect.Type;
24: 80682 3872736 java.nio.HeapCharBuffer
25: 118373 3787936 org.apache.ibatis.reflection.property.PropertyTokenizer
26: 151594 3638256 org.apache.ibatis.reflection.invoker.MethodInvoker
27: 5460 3581760 io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueue
28: 40038 3185696 [S
29: 52261 2926616 java.util.LinkedHashMap
30: 41287 2642368 java.util.regex.Matcher
31: 17572 2530368 com.mysql.jdbc.Field
Total 42816595 2491201080
采用jmap -histo pid>a.log日志将其保存,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
jmap -dump:format=b,file=outfile 27682可以将27682进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)。