微服务问题定位——jmap

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

其他功能

参考链接

显示 Gitment 评论