一.问题
生产环境服务器变慢
二.分析
从以下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] 举报,一经查实,本站将立刻删除。