记一次Flink任务Full gc的问题排查

最近发现flink任务vc_lark_rtc_event_job_new_test会每隔一两天会造成上游topic消费积压,后来发现是因为full gc(Full GC(Ergonomics)通过TM中的gc.log.0.current日志文件查看)频繁导致cpu飙升,造成数据处理不过来造成积压,查看Dtop监控可以看到

记一次Flink任务Full gc的问题排查_第1张图片

 

然后进入到tm中,如下图:

 

记一次Flink任务Full gc的问题排查_第2张图片

点击webshell,

记一次Flink任务Full gc的问题排查_第3张图片

 

根据进程id来获取收集器的各部分内存占用量,通过jmap -heap 进程id,如下图(由于找不到了当时的截图,所以这里用两个运行正常情况的图)

记一次Flink任务Full gc的问题排查_第4张图片 

 

 

可以发现上面两个图中,第一个Eden和两个Survivor区的比例不是8:1:1,但是可以看到明明SurvivorRatio是8(表示 两个Survivor:Eden = 2:8 ,每个Survivor占 1/10),为什么?JDK 1.8中在没有对 GC 算法进行配置,默认使用UseParallelGC,而这个收集器会默认开启AdaptiveSizePolicy,这个配置会对Eden和两个Survivor的占用空间进行调整,Full GC(Ergonomics)就是因为这个自动调整导致的,这种配置导致在进行YGC的时候存活的对象会放到To区,但是由于To区存储不下(空间太小了)导致直接存储到了老年代,这样老年代的空间越来越大,最终Full GC,而且YGC下存活的对象越大,老年代空间增长的越多。解决方法有多种,去掉AdaptiveSizePolicy、修改收集器等,详看参考文档

参考文档:

https://www.jianshu.com/p/7414fd6862c5

你可能感兴趣的:(Flink)