曾经在生产环境遇到过GC的问题,我们做的是一个数据监控系统。当时的现象是,程序偶现会在某些时间点丢数据,然后程序的粒度是秒级别的,所以丢数据用户感知会很强烈。一开始是怀疑程序bug导致数据采集错误,但是想了很久,查了日志,做了很多测试都没有复现。后来想到是不是GC影响的,用GC Viewer查看了GC日志,果然,发现了程序耗费了很多时间在full GC上,占了运行时间的42.8%。基本明白了是GC的问题之后,我就开始想,是不是程序分析的无用数据太多了?还是程序的运行内存开的太小了?还是说垃圾收集器选择的有问题?试了一下,清理了一些无用数据,并将程序内存调大,运行了一段时间,gc的次数和时间明显减少了。上面的案例,算是一次简单的GC问题定位吧,后续其实还是出现了几次GC问题,仿照上面的思路,看看GC日志,基本也可以把问题找出来。
作者回复: 非常感谢你的经验分享!GC是调优的重要环节。