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

一.问题

生产环境服务器变慢

二.分析

从以下5个角度进行排查

1.CPU ——  top命令

2.内存 ——  free命令

3.硬盘 ——  df命令

4.磁盘Io ——  iostat命令

5.网络Io —— ifstat命令

三.步骤

1.Top命令进行整机查看

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

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

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

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

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

  发现free内存很少

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

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

  fullgc不回收

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

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

  6.已初步确定内存溢出

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

8.下载到本地用MAT工具查看 记一次Jvm内存泄露问题排查

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

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

 

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

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

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

11.第二种工具jvisualvm

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

 

 

 将内存快照导入jvisualvm

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

 

 选择最高的大对象点击进去查看

 

 

四.总结

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

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

  一些常用排查命令请参考:https://www.cnblogs.com/shawn-sun/p/13970396.html

 

原文链接:https://www.cnblogs.com/shawn-sun/p/13967715.html

原创文章,作者:摘自网络,如若转载,请注明出处:https://www.15cov.cn/

本页面内容由网络采集 生成,若侵权请及时联系删除。1606107060@qq.com

发表评论

邮箱地址不会被公开。 必填项已用*标注