记录一次线上频繁Full GC问题排查

问题描述

提示:这里描述项目中遇到的问题:

在某一天下午,公司钉钉群突然很多人反馈,系统很卡,响应很慢。于是我火速连接上服务器,发现服务正在疯狂执行GC,但是效果并不显著,堆空间也快占满了,满屏的 Full GC,此刻应该是一直处于STW(STOP THE WORLD),所以系统无响应。

记录一次线上频繁Full GC问题排查_第1张图片


问题排查

1.先别着急重启服务,先导出此时栈信息以及堆信息

先输入 `jps` 找出当前进程的pid
导出栈信息到statck.txt文件 `jstack -l  pid > stack.txt` 或者 `jstack -F  pid > stack.txt`
导出堆空间信息到filename.hprof文件 `jmap -dump:live,format=b,file=filename.hprof pid`

2.导出后,使用MAT分析工具(http://www.eclipse.org/mat/downloads.php)打开filename.hprof

勾选这个选项,生成分析报告

记录一次线上频繁Full GC问题排查_第2张图片

如果内存不够大话,会报错,那么去配置文件,修改最大内存大小即可

记录一次线上频繁Full GC问题排查_第3张图片

点击 Histogram

记录一次线上频繁Full GC问题排查_第4张图片

发现是HashMap占用的绝大部分的内存

记录一次线上频繁Full GC问题排查_第5张图片

点击树状引用

记录一次线上频繁Full GC问题排查_第6张图片
发现有一条查询SQL,猜测应该是一次查出来很多数据,同时放到map里去了
记录一次线上频繁Full GC问题排查_第7张图片

点击小齿轮

记录一次线上频繁Full GC问题排查_第8张图片

找到内存占用大的线程,逐步往下找,看看在执行什么操作,我们可以看到,执行了人事档案中的某一个方法,方法的行数,以及参数类型,我们都可以找到,最后定位到相应的代码即可。
记录一次线上频繁Full GC问题排查_第9张图片
方法详细参数
记录一次线上频繁Full GC问题排查_第10张图片

我们也可以在刚刚的树状列表里找到,这个方法的传参
记录一次线上频繁Full GC问题排查_第11张图片

原因分析:

提示:这里填写问题的分析:

最后定位到具体的代码,发现是一下子查询了太多的数据,导致的堆空间内存不足,最后修改为分页导出。


你可能感兴趣的:(java,java,jvm,eclipse)