http://snv.iteye.com/blog/1826402
jmap 的用途是为了展示java进程的内存映射信息,或者堆内存详情
常用的参数如下:
histo
jmap -histo pid 展示class的内存情况
展示的信息为编号,实例数,字节,类名
例如:
- jmap -histo:live 2540
- num #instances #bytes class name
- ----------------------------------------------
- 1: 20981 908120 [C
- 2: 21015 504360 java.lang.String
- 4: 9999 159984 org.learn.util.User
- 5: 312 59216 [Ljava.lang.Object;
heap
jmap -heap pid 展示pid的整体堆信息
如:
- $ jmap -heap 29030
- JVM version is 16.3-b01
- using thread-local object allocation.
- Parallel GC with 13 thread(s)
- Heap Configuration:
- MinHeapFreeRatio = 40
- MaxHeapFreeRatio = 70
- MaxHeapSize = 8436842496 (8046.0MB)
- NewSize = 5439488 (5.1875MB)
- MaxNewSize = 17592186044415 MB
- OldSize = 5439488 (5.1875MB)
- NewRatio = 2
- SurvivorRatio = 8
- PermSize = 21757952 (20.75MB)
- MaxPermSize = 88080384 (84.0MB)
- Heap Usage:
- PS Young Generation
- Eden Space:
- capacity = 87883776 (83.8125MB)
- used = 31053080 (29.614524841308594MB)
- free = 56830696 (54.197975158691406MB)
- 35.33425782706469% used
- From Space:
- capacity = 13828096 (13.1875MB)
- used = 196608 (0.1875MB)
- free = 13631488 (13.0MB)
- 1.4218009478672986% used
- To Space:
- capacity = 16384000 (15.625MB)
- used = 0 (0.0MB)
- free = 16384000 (15.625MB)
- 0.0% used
- PS Old Generation
- capacity = 156172288 (148.9375MB)
- used = 27098208 (25.842864990234375MB)
- free = 129074080 (123.09463500976562MB)
- 17.35148299805917% used
- PS Perm Generation
- capacity = 88080384 (84.0MB)
- used = 50847592 (48.492042541503906MB)
- free = 37232792 (35.507957458496094MB)
- 57.728622073218936% used
对应的说明如下:
- Parallel GC with 13 thread(s) #13个gc线程
- Heap Configuration:#堆内存初始化配置
- MinHeapFreeRatio = 40 #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率
- MaxHeapFreeRatio = 70 #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率
- MaxHeapSize = 8436842496 (8046.0MB)#-XX:MaxHeapSize=设置JVM堆的最大大小
- NewSize = 5439488 (5.1875MB) #-XX:NewSize=设置JVM堆的‘新生代’的默认大小
- MaxNewSize = 17592186044415 MB #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
- OldSize = 5439488 (5.1875MB) #-XX:OldSize=设置JVM堆的‘老生代’的大小
- NewRatio = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
- SurvivorRatio = 8 #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
- PermSize = 21757952 (20.75MB) #-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
- MaxPermSize = 88080384 (84.0MB) #-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小
- Heap Usage:
- PS Young Generation
- Eden Space:#Eden区内存分布
- capacity = 87883776 (83.8125MB)
- used = 31053080 (29.614524841308594MB)
- free = 56830696 (54.197975158691406MB)
- 35.33425782706469% used
- From Space:#其中一个Survivor区的内存分布
- capacity = 13828096 (13.1875MB)
- used = 196608 (0.1875MB)
- free = 13631488 (13.0MB)
- 1.4218009478672986% used
- To Space:#另一个Survivor区的内存分布
- capacity = 16384000 (15.625MB)
- used = 0 (0.0MB)
- free = 16384000 (15.625MB)
- 0.0% used
- PS Old Generation#当前的Old区内存分布
- capacity = 156172288 (148.9375MB)
- used = 27098208 (25.842864990234375MB)
- free = 129074080 (123.09463500976562MB)
- 17.35148299805917% used
- PS Perm Generation#当前的 “永生代” 内存分布
- capacity = 88080384 (84.0MB)
- used = 50847592 (48.492042541503906MB)
- free = 37232792 (35.507957458496094MB)
- 57.728622073218936% used
dump
jmap -dump:<dump-options> pid 把pid的整体堆信息输出
dump-options:
live
format=b
file=<file>
导出的文件可以供分析用,比如jhat或者mat,以便查找内存溢出原因
例如:
- jmap -dump:live,format=b,file=tomcat.bin 29030