Flink任务问题分析与性能调优

Flink任务问题分析与性能调优

作者: 吴培坚——虎牙实时计算平台研发工程师

1 性能分析:

Flink调优对于问题的定性很重要,只有先确定问题性质才能针对性优化。首先要明白,Flink是分布式流计算框架,可简单理解为多个相互通讯的有状态java进程,其调优本质跟普通的java程序大同小异。

1.1 问题定位的基础:

只有具备良好的的监控数据支持,才能感知问题/异常的发生并对其快速定位。

监控指标主要分为以下三个维度:

  1. Flink框架: 框架本身内嵌了很多方便运维调优的统计信息,极大方便了性能问题的定位。如:日志、反压系数、数据partition策略、数据传输指标、gc信息、延迟指标…
  2. 系统指标:操作系统本身的指标信息。如:oomkilled频率(容器环境)、内存用量、cpu负载、磁盘网络I/O…
  3. 进程/线程信息:TaskManager进程内的运行时信息,各线程算力负载信息、线程调度信息、Rocksdb线程负载…
1.2 性能问题主要归为两类:
  • 稳定性: 此类一般是进程异常退出、jvm oom、容器节点内存溢出导致进程被操作系统杀死的oomkilled问题、容器pod驱逐、主机宕机等导致节点丢失任务频繁重启。
  • 处理性能: 由于资源不足、i/o阻塞、程序逻辑等,导致的计算任务处理性能低下。稳定性低的任务往往也会有处理性能问题。

2 如何定位

2.1 稳定性问题:

稳定性问题非常直观,最终影响就是导致任务频繁的重启,这里只例举一些代表性原因:

原因及确定方式:

  1. 内存使用超出节点规格触发oomkilled。查看节点oomkilled记录,从节点内存指标可看出内存使用量达到100%后回落。 一般是内存不足、Rocksdb托管的内存溢出。
  2. TaskManager进程由于程序错误退出:查看具体丢失的taskmanager日志,可以看到TaskManager进程退出且正常关闭资源。 一般是程序代码不够鲁棒、内存配置问题导致。
  3. GC导致心跳超时:查看GC指标,GC日志。
  4. k8s驱逐:上述排查无异,查看k8s驱逐记录。 宿主机宕机、高负载节点驱逐(一般出现在高峰期)

如下图示Pod内存使用在1处达到100%,2显示TaskManager进程被操作系统kill,在3处删除pod后无监控点。这种都是节点出现oomkilled。

出现oomkilled时候,用户会收到告警。同时在"任务仪盘表页面-任务分析模块",会显示最近一天统计的oomkilled次数。

  • 如何判定是Rocksdb导致内存溢出?
    通过jemalloc分析可以看到大部分内存占用都消耗在Rocksdb的未压缩block上,基本上可以确定为Rocksdb导致。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值