最近线上环境系统经常出现内存暴涨的现象,前段时间经常出现数据库服务器CPU暴增(经常100%)的情况。经过逐步排查,最终解决问题,先将解决过程记录下来。
解决内存暴涨步骤
1.排查报错日志
运维反应内存涨的快,我们第一反应肯定是拿到日志,进行分析,发现很多GC,初步断定内存泄漏
2.查看tomcat线程
命令:ps -ef|grep tomcat
3.查看该pid下线程占用情况
命令:top -Hp [pid]
会发现前几个线程(eg:pid1、pid2等)占用资源比较多,几乎占用了整个cpu资源,将pid1、pid2等转换成16进制pid1_16、pid2_16.
3.1 线上问题比较紧急时,可以先杀掉这些线程,然后在逐步排查
命令:kill -9 [pid]
4.下载当前java线程栈,我公司路径/usr/java/jdk1.7.0_80/bin/jstack -l [pid] >/webtv/gc.txt
5.分析第4步中的线程栈,排查步骤3中的pid1_16、pid2_16等线程具体原因
6.如果前面的步骤还不能解决问题,则进行如下一步,dump该pid下java堆数据,/usr/java/jdk1.7.0_80/bin/jmap -dump:format=b,file=/webtv/gc.hprof [pid
7.使用MAT工具(自行百度下载)加载如上堆文件,然后进行分析。
参考网址:https://www.cnblogs.com/kingszelda/p/9034191.html
来源:oschina
链接:https://my.oschina.net/u/2312022/blog/3047100