微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

记一次Jvm内存泄露问题排查

一.问题

生产环境服务器变慢

二.分析

从以下5个角度进行排查

   1.cpu ——  top命令

  2.内存 ——  free命令

  3.硬盘 ——  df命令

  4.磁盘Io ——  iostat命令

  5.网络Io —— ifstat命令

三.步骤

  1.Top命令进行整机查看

 

 从图中看出cpu基本正常,平均加载时间也正常,内存8.8g!!!

  2.初步定位内存太高,可能原因,内存溢出

  3.细看内存,执行命令free

 

   发现free内存很少

       4.查看gc回收器,执行命令 jmap -heap pid(进程号)

 

 

   fullgc不回收

  5.查看堆内存部分使用量 执行jstat -gcutil   pid 1000

 

   6.已初步确定内存溢出

    7.导出内存快照 jmap -dump:format=b,file=/tmp/heap.hprof  pid  

  8.下载到本地用MAT工具查看

  

 

   懒汉式排查,直接查看Leak SUSPECTs快速查看泄露的可疑点

  

 

   可以看出Hashmap中存在一个6g的数据一直占用内存,而且no GC root(可达性分析) 即不会被老年代的Full Gc回收。

  9.排查最近的代码,是否有新增Job或者Mq,里面是否有用到Hashmap

  10.最终发现有个job里面有用到Hashmap去获取一个非单例的对象。

四.总结

  针对不同的情况要从不同角度去分析

  先整体排查定位问题,针对不同问题排查不同地方

  

  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐