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

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

 

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

 

点击webshell,

 

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

 

 

 

可以发现上面两个图中,第一个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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Flink中,反压(Backpressure)是指当数据生产速度超过数据消费速度时,消费端不能及时处理全部数据,导致未处理的数据在系统中积压,从而影响系统的性能和稳定性。如果Flink应用程序中存在反压问题,可以通过以下几个步骤来进行排查和解决: 1. 监控Flink任务的运行状态。可以通过Flink的Web界面或者JMX监控工具来查看任务的运行状态、吞吐量、延迟等指标,从而了解是否存在反压问题。 2. 调整Flink任务的并行度。如果任务的并行度过低,可能会导致某些算子的处理速度过慢,从而引起反压问题。可以通过增加算子的并行度或者调整任务的并行度来缓解反压问题。 3. 调整算子的处理逻辑。如果算子的处理逻辑过于复杂或者存在性能瓶颈,可能会导致算子处理速度过慢,从而引起反压问题。可以通过优化算子的处理逻辑、使用异步IO等方式来提高算子的处理速度。 4. 使用Flink的反压机制。Flink提供了反压机制来解决反压问题,可以通过设置ExecutionConfig.setAutoWatermarkInterval()方法来开启反压机制。反压机制会根据算子的处理速度来自动调整生产数据的速度,从而避免数据积压和反压问题。 5. 使用Flink的流控机制。Flink还提供了流控机制来限制数据的生产和消费速度,从而避免反压问题。可以通过设置ExecutionConfig.setLatencyTrackingInterval()方法来开启流控机制。流控机制会根据数据的延迟来调整生产和消费数据的速度,从而保证系统的稳定性和性能。 通过以上几个步骤可以排查和解决Flink应用程序中的反压问题。需要注意的是,反压问题是一个非常常见的问题,需要在设计和编写Flink应用程序时充分考虑并发和性能问题,从而避免反压问题的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值