问题背景
一次在查看服务器的gc状态的时候发现,fgc的次数过高(200多次)且远大于ygc(3次),在线上环境和测试环境都有同样的现象,长时间的观察发现ygc的次数基本不变,fgc隔段时间后就会增加一次(ygc的平均时间:27ms, fgc的平均时间:58.28ms, 因为内存几乎没什么数据,fgc的时间不是很特别长)
问题分析
查看服务器启动期间在线人数和内存使用情况,可以看到在线人数很少,且内存的占用很低,排除内存泄露导致的JVM内存占用过高而触发fgc的原因
通过jstat -gccause 查看gc的lgcc参数值可以看到上一次gc是System.gc触发导致的,而ygc没变化过,所以是system.gc导致了fgc
项目应用层确认没有调用System.gc, 参考以下资料,考虑是第三方库的调用,网上搜索找到一些线索