频繁fullgc 排查思路?
首先:肯定会有对象频繁的进入老年代才会导致fullgc
哪些对象会进入老年代呢?
1 >15岁(默认)
2 大于 超过s区50%的那部分对象的年龄 的 对象
3 大对象
分析1:大于15岁的对象一般是单例的 spring 管理的那种对象可以暂时忽略
分析2:这种情况可能是年轻代的内存给小了或者S区的内存给小了
分析3:排查是不是有select*大表的这种情况
那什么时候回fullgc呢?
1.old内存小于历次ygc流入的平均对象大小
2.ygc后S区也放不下 会进入Old old也放不下
3.内存大小 小于cms垃圾收集器配置的百分比 (cms并发清理的时候会有浮动垃圾)
fullgc基本上直接原因就是老年代空间不够了
这一点别忘了 是不是 老年代有大量的对象释放不掉 导致老年代空间一直被占了
除了单例的对象 是不是会存在内存泄漏的情况 比如ThreadLocalMap没clear jvm内置缓存没设置过期和大小
最最常见的情况就是E区S区的大小设置的不合理
cpu负载高?
1.频繁Full gc
2.线程开太多?