jmap是JDK自带的堆信息查看和调试工具,可以将堆信息导出到文件分析,可以查看堆空间分配等信息,是Java性能调优常用工具之一。
完整安装JDK后自带jmap工具,无需单独安装,一般位于Java的bin目录下。
命令格式:jmap [参数]
常用参数如下:
参数 |
说明 |
举例 |
---|---|---|
-dump:[live,]format=b,file=/you/path/filename.hprof <pid> |
输出JVM的堆对象内容到指定文件。推荐以.hprof后缀命名文件,可以用MAT工具直接分析。 live选项是可选的,如果选live,那么只输出活的对象到文件。 |
jmap -dump:format=b,file=/opt/log/java12123.hprof 12123 |
-finalizerinfo <pid> |
输出正等候回收的对象的信息。 |
jmap -finalizerinfo 12123 |
-heap <pid> |
输出当前Java进程堆的概要统计信息,如GC算法,heap的配置空间等。 |
jmap -heap 12123 |
-histo[:live] <pid> |
输出当前class的实例数目、内存占用、类全名信息。 |
jmap -histo:live 12123 | head -n 20 |
-permstat <pid> |
打印classload和jvm heap中perm代的信息,包含每个classloader的名字、活泼性、地址、父classloader和加载的class数量等信息。 |
jmap -permstat 12123 |
jmap -heap <pid> 举例说明:
using parallel threads in the new generation. ##新生代采用的是并行线程处理方式 using thread-local object allocation. Concurrent Mark-Sweep GC ##同步并行垃圾回收 Heap Configuration: ##堆配置情况 MinHeapFreeRatio = 40 ##最小堆使用比例 MaxHeapFreeRatio = 70 ##最大堆可用比例 MaxHeapSize = 2147483648 (2048.0MB) ##最大堆空间大小 NewSize = 268435456 (256.0MB) ##新生代分配大小 MaxNewSize = 268435456 (256.0MB) ##最大新生代可分配大小 OldSize = 5439488 (5.1875MB) ##老年代大小 NewRatio = 2 ##新生代比例 SurvivorRatio = 8 ##新生代与survivor的比例 PermSize = 134217728 (128.0MB) ##perm区大小 MaxPermSize = 134217728 (128.0MB) ##最大可分配perm区大小
Heap Usage: ##堆使用情况 New Generation (Eden + 1 Survivor Space): ##新生代(Eden区 + survivor空间) capacity = 241631232 (230.4375MB) ##Eden区容量 used = 77776272 (74.17323303222656MB) ##已经使用大小 free = 163854960 (156.26426696777344MB) ##剩余容量 32.188004570534986% used ##使用比例 Eden Space: ##Eden区 capacity = 214827008 (204.875MB) ##Eden区容量 used = 74442288 (70.99369812011719MB) ##Eden区使用 free = 140384720 (133.8813018798828MB) ##Eden区当前剩余容量 34.65220164496263% used ##Eden区使用情况 From Space: ##survivor1区 capacity = 26804224 (25.5625MB) ##survivor1区容量 used = 3333984 (3.179534912109375MB) ##survivor1区已使用情况 free = 23470240 (22.382965087890625MB) ##survivor1区剩余容量 12.43827838477995% used ##survivor1区使用比例 To Space: ##survivor2 区 capacity = 26804224 (25.5625MB) ##survivor2区容量 used = 0 (0.0MB) ##survivor2区已使用情况 free = 26804224 (25.5625MB) ##survivor2区剩余容量 0.0% used ## survivor2区使用比例 concurrent mark-sweep generation: ##老年代使用情况 capacity = 1879048192 (1792.0MB) ##老年代容量 used = 30847928 (29.41887664794922MB) ##老年代已使用容量 free = 1848200264 (1762.5811233520508MB) ##老年代剩余容量 1.6416783843721663% used ##老年代使用比例 Perm Generation: ##perm区使用情况 capacity = 134217728 (128.0MB) ##perm区容量 used = 47303016 (45.111671447753906MB) ##perm区已使用容量 free = 86914712 (82.8883285522461MB) ##perm区剩余容量 35.24349331855774% used ##perm区使用比例
信息来源:https://blog.csdn.net/zhaozheng7758/article/details/8623530