jmap
使用场景
- 内存溢出,线上程序运行时内存越来越大,用jmap dump出堆内存的信息,然后进行相关分析
- 内存的真实使用大于预期,这是因为设计不合理导致冗余的对象存在内存中,用jmap来查看内存中的对象,分析是否有存在的必要
- jvm优化,利用jmap来查看整个堆的使用情况,根据老年代和新生代的使用比例来划分jvm的各个区域
使用实例
在使用jmap连接进程时,启动的jvm版本和jdk版本要一一对应,毕竟jmap是jdk下的命令包
$ps -ef | grep java 查找系统的java进程
$jmap -heap pid 打印指定进程堆的摘要信息,包括gc算法
参数说明
- Heap Configuration: 堆配置信息
MinHeapFreeRatio 在堆的使用率小于MinHeapFreeRatio(%)的时候进行收缩,当Xmx=Xms的时候此配置无效
MaxHeapFreeRatio 在堆使用率大于MaxHeapFreeRatio(%)的时候进行扩展,当Xmx=Xms的时候此配置无效
MaxHeapSize 堆的最大空间
NewSize 新生代的大小
MaxNewSize 最大的新生代的大小
OldSize 老年代的大小
NewRatio 老年代和新生代的比例
SurvivorRatio 新生代中Eden和和Survivor区的比例
PermSize 永久代的大小
MaxPermSize 久代的最大内存
G1HeapRegionSize 使用G1垃圾收集的区间 - Heap Usage: 堆的使用信息
- New Generation (Eden + 1 Survivor Space): 新生代的大小(Eden区加一个Survivor区的空间信息
capacity 总内存
used 已使用内存
free 剩余内存
13.823827124993642% used 使用内存占比 - Eden Space: Eden区的大小
capacity
used
free
15.178337946947952% used - From Space: 第一个Surivivor区的空间信息
capacity
used
free
2.984432830624237% used - To Space: 第二个Survivor区的空间信息
capacity
used
free
0.0% used - concurrent mark-sweep generation: CMS垃圾收集占用的空间信息
capacity
used
free
75.36470666527748% used - Perm Generation: 永久代的空间信息
capacity
used
free
47.5915253162384% used