第三章 Flink基础理论之内存优化及常见内存报错解决方案

news/2024/4/28 23:18:08/文章来源:https://blog.csdn.net/qq_27924553/article/details/127251271

第三章 Flink基础理论之内存优化及常见内存报错解决方案

  • 哇=.=
    在这里插入图片描述

1、总体内存模型

1.1、内存模型概述

​ Flink内存配置分为JobManager内存配置和TaskManager内存配置

配置项TaskManager配置参数JobManager配置参数
Total Flink Memorytaskmanager.memory.flink.sizejobmanager.memory.flink.size
Total Process Memorytaskmanager.memory.process.sizejobmanager.memory.process.size
  • JobManager:Flink集群的控制单元本地执行模式下不需要为 JobManager 进行内存配置,配置参数将不会生效。

  • TaskManager:负责执行用户代码

1.2、内存配置注意事项

Standlone模式:独立集群需要声明分配给Flink自身内存大小,配置·Total Flink Memory较合适

Flink On Yarn模式:容器化部署模式配置任务运行时TM占用总内存大小,超过这个值会被容器杀掉(即OOM),配置Total Process Memory

③细粒度配置方式:配置task heap (taskmanager.memory.task.heap.size) 和managed memory(taskmanager.memory.managed.size)

  • 注意事项:以上配置必须选择一种,否则Flink会启动失败;不建议同时显式地配置 Total Flink memory 和整个 Total Process Memory ,否则会冲突
  • 注意事项:Flink安装时在以下配置中选其中一种即可
# 配置一
taskmanager.memory.flink.size:1024# 配置二
taskmanager.memory.process.size:1024# 配置三
taskmanager.memory.task.heap.size:1024
taskmanager.memory.managed.size:1024

2、JobManager内存模型

  • 内存模型图如下

img

2.1、JVM内存

  • 含义:JVM虚拟机本身占用的内存,包括元空间和执行开销

(1)JVM元空间

taskmanager.memory.jvm-metaspace.size: 默认256mb

(2)JVM执行开销

taskmanager.memory.jvm-overhead.fraction: 默认0.1
taskmanager.memory.jvm-overhead.min: 默认192
mbtaskmanager.memory.jvm-overhead.max: 默认1gb

注意事项:总进程内存×fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

2.2、Flink框架内存

  • 含义:Flink框架运行时堆外内存大小,用来执行akka等外部依赖,同时也负责运行checkpoint回调及作业提交时的用户代码。
jobmanager.memory.off-heap.size: 默认128M

2.3、Job内存

  • 含义:Job的作业控制内存,取决于提交的作业个数和作业的结构以及用户代码的要求
jobmanager.memory.heap.size

3、TaskManager内存模型

  • 内存模型图如下

img

3.1、JVM内存

  • 含义:JVM虚拟机本身占用的内存,包括元空间和执行开销

(1)JVM元空间

taskmanager.memory.jvm-metaspace.size: 默认256mb

(2)JVM执行开销

taskmanager.memory.jvm-overhead.fraction: 默认0.1
taskmanager.memory.jvm-overhead.min: 默认192
mbtaskmanager.memory.jvm-overhead.max:默认1gb

注意事项:总进程内存×fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

3.2、框架内存

  • 含义:Flink框架运行时Taskmanager本身占用的内存大小,不计入slot资源中

(1)堆内内存

taskmanager.memory.framework.heap.size:默认128MB

(2)堆外内存

taskmanager.memory.framework.off-heap.size:默认128MB

3.3、网络缓冲内存

  • 含义:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区。

(1)堆外内存

堆外:taskmanager.memory.network.fraction:默认0.1
#内存区间
taskmanager.memory.network.min:默认64mb
taskmanager.memory.network.max:默认1gb
  • 注意事项:Flink内存×fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

3.4、托管内存

  • 含义:用于RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。
堆外:taskmanager.memory.managed.fraction,默认0.4
#默认内存
taskmanager.memory.managed.size,默认none
  • 注意事项:如果size没指定,则等于Flink内存×fraction

3.5、Task内存

  • 含义:Task执行用户代码时所使用的内存

(1)堆内内存

taskmanager.memory.task.heap.size:默认none,由Flink内存扣除掉其他部分的内存得到。

(2)堆外内存

taskmanager.memory.task.off-heap.size:默认0,表示不使用堆外内存

4、案例分析

在Flink On Yarn模式下提交任务时,一般参数指定的是总进程内存:jobmanager.memory.process.size = 4G,taskmanager.memory.process.size = 8G,则每一块得到的内存大小如下

JobManager总内存: 4096M
TaskManager总内存: 8192M

4.1、JobManager内存分配

(1)JVM内存占用:256 + 409.6 = 665.6

  • JVM元数据:256M

  • JVM执行开销:4 × 1024 × 0.1 = 409.6M,在【192,1024】之间,则消耗409.6M

(2)Flink框架堆外内存:128M

(3)Job内存:4096 - 665.6 - 128 = 3302.4M

4.2、TaskManager内存分配

(1)JVM内存占用:256 + 819.2 = 1075.2M

  • JVM元空间:256M
  • JVM执行开销:8 × 1024 × 0.1 = 819.2M,在【192,1024】之间,则消耗819.2M
Flink内存: 7116.8M

(2)Flink框架内存:128 + 128 = 256M

  • Flink框架堆外内存:128M
  • Flink框架堆内内存:128M
Flink剩余内存: 6860.8M

(3)网络缓冲内存: 7116.8 × 0.1 = 711.68M

  • 对外内存:7116.8M × 0.1 = 711.68M,在【192,1024】之间,则消耗711.68M
Flink剩余内存: 6,149.12M

(4)托管内存:7116.8 × 0.4 = 2,846.72M

  • 托管内存:7116.8 × 0.4 = 2,846.72M
剩余内存:3,302.4M

(5)Task堆内内存:

  • 堆内内存:3302.4M
Task堆内内存 = Task总内存 - (JVM内存 + Flink框架内存 + 网络缓冲内存 + 托管内存)
  • 堆外内存:0M

5、任务提交资源配置(生产环境)

5.1、Flink 任务提交时内存参数配置项如下

  • Standlone模式:一般配置Total Flink Memory
  • Flink On Yarn模式:一般配置Total Process Memory
配置项TaskManager配置参数JobManager配置参数
Total Flink Memorytaskmanager.memory.flink.sizejobmanager.memory.flink.size
Total Process Memorytaskmanager.memory.process.sizejobmanager.memory.process.size

5.2、Standlone模式下生产环境提交参数:一般指定Flink内存

./bin/standalone-job.sh start --job-classname \
-p 5 \ 指定并行度
-Dyarn.application.queue=test \ 指定yarn队列
-Djobmanager.memory.flink.size=2048mb \ JM2~4G足够
-Dtaskmanager.memory.flink.size=4096mb \ 单个TM2~8G足够

5.3、Flink On Yarn模式下生产环境提交参数:一般指定JVM进程总体内存,可自动推导出用于Task自身的内存

  • JM内存范围:2~4G
  • TM内存范围:单个2~8G
bin/flink run \
-t yarn-per-job \
-d \
-p 5 \ 指定并行度
-Dyarn.application.queue=test \ 指定yarn队列
-Djobmanager.memory.process.size=2048mb \ JM2~4G足够
-Dtaskmanager.memory.process.size=4096mb \ 单个TM2~8G足够
-Dtaskmanager.numberOfTaskSlots=2 \ 与容器核数1core:1slot或2core:1slot

5.4、RockDB内存配置

  • 注意:EmbeddedRocksDBStateBackend :使用本机内存
默认情况RocksDB 设置为将本机内存分配限制为托管内存的大小
  • 注意事项:如果禁用默认的 RocksDB 内存控制,RocksDB 分配的内存超过请求的容器大小(总进程内存)的限制,则可以在容器化部署中终止 TaskManager

6、Flink内存常见错误

6.1、IllegalConfigurationException

  • 问题现象
TaskExecutorProcessUtils 或 JobManagerProcessUtils抛出的 IllegalConfigurationException
  • 问题原因:存在无效的配置值
  • 解决方案:重新配置内存参数

6.2、OutOfMemoryError: Java heap space

  • 问题现象
OutOfMemoryError: Java heap space
  • 问题原因:JVM Heap 太小
  • 解决方案:
    • 增加总内存来增加 JVM 堆大小
    • ② 增加TaskManager堆内存
    • ③增加JobManager的JVM 堆内存

6.3、OutOfMemoryError: Metaspace

  • 问题现象
OutOfMemoryError: Metaspace 
  • 问题原因: JVM 元空间限制配置得太小
  • 解决方案:加总内存或者JVM元空间内存

6.4、 IOException: Insufficient number of network buffers

  • 问题现象:
 IOException: Insufficient number of network buffers
  • 问题原因:网络缓冲区内存不足
  • 解决方案:增加总内存或网络缓冲区内存

6.5、 JobManager memory configuration failed

  • 问题现象
org.apache.flink.configuration.IllegalConfigurationException: JobManager memory configuration failed: Sum of configured JVM Metaspace (256.000mb (268435456 bytes)) and JVM Overhead (192.000mb (201326592 bytes)) exceed configured Total Process Memory (256.000mb (268435456 bytes)).
  • 问题原因:Flink 容器尝试分配超出其请求大小(Yarn 或 Kubernetes)的内存

  • 解决方案:增加 TaskManager 的总内存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_398737.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

土方量计算的准确作法

​现在说到土方量结算,绝大多数土木行业的人都说某某软件很方便,但是我要问到手算会吗,大多数人都会支支吾吾,虽然手算确实不现实,但是我们做为专业人员,总不能沦为软件使用者吧?其中的原理大家…

公众号网课题库系统-注册即可使用

公众号网课题库系统-注册即可使用 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转…

大数据专题-spark mysql python爬虫携程景点爬取(含虚拟机镜像)

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域✌ 项目名称 大数据专题-spark mysql python爬虫携程景点爬取(含虚拟机镜像) 视频效果 大数据专题-spark mysql python爬虫携程景点系统说明 一&…

Vue组件之间的数据共享详解

目录前言一,props的作用二,父向子传值2.1 子元素2.2 父元素2.3 整体代码三,子向父传值3.1 子组件3.2 父组件3.3 整体代码四,兄弟之间的数据传递4.1 事件总线EventBus介绍(面试高频)4.2 传值方4.3 接收方后记前言 组件…

Servlet - Filtering (过滤器))

[TOC](Servlet - Filtering (过滤器) ) 1. What 1.1 什么是Filter Servlet过滤器Filter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能。Filter通常封装了一…

深度神经网络的优化算法,进化算法优化神经网络

有哪些手段可以提升深度神经网络的泛化性能 人工神经网络以其智能性见长,那么神经网络能真的学到一个映射的本质吗?也就是说,对一个映射给出一定的必要的训练样本训练后,网络能否对样本以外的样本给出较为准确的预测。 泛化能力…

概率论与数理统计学习:随机向量(三)——知识总结与C语言实现案例

hello,大家好 这里是第八期概率论与数理统计的学习,我将用这篇博客去总结这期的知识点以及实现用C语言去做题的过程。 本期知识点: 条件分布 条件分布的概念离散型随机变量的条件概率分布连续型随机变量的条件概率密度 随机变量的独立性 那…

ROS学习笔记三(TF的类)

1.数据类型 数据类型定义在tf/transform_datatypes.h.里 1.1 基本数据类型(Quaternion, Vector, Point, Pose, Transform) TypetfQuaterniontf::QuaternionVectortf::Vector3Pointtf::PointPosetf::PoseTransformtf::Transform 1.2 tf::Stamped tf::Stamped在上面的数据类型…

RocketMQ 5.0:无状态代理模式的探索与实践

本文作者:金吉祥, Apache RocketMQ PMC Member,阿里云智能高级技术专家 背景 首先,让我们来看下是遇到了哪些痛点问题,促使我们去探索一种无状态代理的RocketMQ新架构的; RocketMQ 拥有一套极简的架构&am…

安卓投屏 QtScrcpy

一、电脑安装adb 版本大于1.0.40以上 40不行 adb 1.0.41下载链接 链接:https://pan.baidu.com/s/1WIPI-p7a4ErTLFYHaTC2kw?pwdadbt 提取码:adbt 安装参考 https://blog.csdn.net/M7_xbc/article/details/122957311 二、打开无线调试并且配对 手机打…

驱动开发(10/10-林雪阵)

终端输入1--->LED1点亮 终端输入2--->LED2点亮 终端输入3--->LED3点亮 终端输入0--->LED熄灭 chdev.c (底层驱动代码&#xff09; #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h>…

【webrtc】rtp 扩展头的ID

ietf 文档地址扩展头的uri 是固定的,因此识别扩展是通过uri地址,而非ID。rtp 扩展头是有个ID的 文档的说法 : 是本地的id,15保留,只可以小于15 本地标识符值 15 保留用于将来的扩展和 不得用作标识符。如果 ID 值 15 是 遇到,它的长度字段应该被忽略,处理 整个扩展应在该…

redis之AOF和RDB持久化

写在前面 因为redis数据是基于内存的&#xff0c;为了避免服务器重启或者是宕机导致数据全部丢失&#xff0c;提供了数据持久化机制&#xff0c;即AOF(Append Only File)日志和RDB快照&#xff0c;接下来我们分别看下。 1&#xff1a;AOF 1.1&#xff1a;AOF日志的实现 首先…

(附源码)计算机毕业设计SSM政府项目管理平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

回顾——PCB绘制

目录 一、原理图库原理图 二、PCB库 三、PCB 一、原理图库原理图 新建工程&#xff1a;文件——New——Project——Name&#xff08;这里复制一下&#xff09;自己选择保存路径 添加文件&#xff1a; 保存工程&#xff1a;(粘贴) 绘制原理图库、原理图 侧边栏消失&…

虚拟社会、区块链和元宇宙

1986年&#xff0c;早期的互联网供应商Quantum Link和娱乐公司Lucasfilm Games发布了第一款MMO游戏名为&#xff1a;《Habitat》基于虚拟角色的社交世界&#xff0c;玩家可以通过300波特的调制解调器(每分钟0.08美元)和用户的Commodore 64(595美元&#xff0c;按今天的价格约为…

Vue 动态换肤

效果如图&#xff1a; 源代码&#xff1a; <template><div :class"[son${temp}]" class"demo3">这是四点零八分的北京<br/>一片手的海浪翻动<br/>这是四点零八分的北京<br/>一声雄伟的汽笛长鸣<br/>北京车站高大的建…

Kafka监控EFAK(Kafka-eagle)部署与踩坑详细记录

环境 阿里云服务器centoskafka 2.4.1 &#xff08;1.1以上版本都能支持&#xff0c;低版本不太清楚了&#xff09;efak 3.0.1 当前时间官网下载的最新版&#xff08;原名叫kafka-eagle&#xff09;efak官网&#xff1a;http://www.kafka-eagle.org/jdk8 部署好的UI 部署流程 …

kafka系列——安装部署,相关命令,配置文件,底层存储结构,log和index文件

点击上方“罗晓胜”&#xff0c;马上关注&#xff0c;您的支持对我帮助很大 / 前言 / Kafka是最初由Linkedin公司开发&#xff0c;用scala语言编写的&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&…

时光机特效在哪里?推荐这三个实用软件给你

现如今有一款时光穿梭机的特效软件非常热门&#xff0c;它具有让照片中的人变年轻或者变老的功能&#xff0c;能让我们看到过去以及未来自己的样子&#xff0c;也能给我们枯燥的生活增添一点趣味感。那么大家是不是已经迫不及待地想知道时光穿梭机特效滤镜在哪了呢&#xff1f;…