首先需要知道可能触发Full GC的机制,才可对症下药
老年代空间不足。
永生代或者元数据空间不足。
System.gc()方法调用。
CMS GC时出现promotion failed和concurrent mode failure
YoungGC时晋升老年代的内存平均值大于老年代剩余空间
有连续的大对象需要分配
接下来介绍两种方法对Full GC 问题进行排查
①利用GC日志
1.1 如何生成GC日志
这里以WEB项目为例,监测Tomcat服务器的GC情况,可以通过IDE设置Tomcat的JVM参数,具体步骤如下图所示:
打开配置
在VM options处设置JVM参数,我这里是将GC日志输出到D盘的iFit_gc.log文件中,GC参数设置可以参考下图
②利用JVM性能调优神器,即VisualVM
VisualVM的简介可以参看以下博客(这篇博客还会以一个案例,教你如何使用VisualVM对内存使用情况进行分析,如何精确定位到哪个实例存在问题):
如果VisualVM安装插件报错,可以参看以下博客:
利用VisualVM查看GC过程的效果图如下(需要安装VisualGC插件):
项目中的Full GC问题
参考博客:一次频繁Full GC问题排查过程分享
参考博客:Full GC问题解决