线上出现堆内存不断提高,到4个G(设置的最大内存为4个G);触发fullGC后,降低,再重新提高。
下载dump文件mat分析后,发现对内存使用只用350M,使用的内存去哪里了,mat中有一项是 Unreachable Objects,发现占用了3G多,去除基本类型后,大部分是com.alibaba.druid.stat.JdbcSqlStat使用的
查阅相关资料,是因为sqlStatMap.put(sql, sqlStat);JdbcSqlStat是被一个Map持有,大对象直接回存入老年代,所以fullGC才会触发。
解决方案:关闭druid的监控功能,注释掉下边配置
<property name="filters" value="stat" />
参考网址:https://blog.csdn.net/wilsonpeng3/article/details/70064336
原因分析:
大对象直接进入老年区[old],积累越来越多,最终触发fullGC;Youg gc清理eden和survivor,不会清理老年代;