【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
《Flink 内存管理》系列(已完结),共包含以下 4 篇文章:
- Flink 内存管理(一):设置 Flink 进程内存
- Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
- Flink 内存管理(三):TaskManager 内存分配(理论篇)
- Flink 内存管理(四):TaskManager 内存分配(实战篇)
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
Flink 内存管理(二):JobManager 内存分配
- 1.分配 Total Process Size
- 2.分配 Total Flink Size
- 3.单独分配 Heap Size
- 4.分配 Total Process Size 和 Heap Size
- 5.分配 Total Flink Size 和 Heap Size
JobManager 是 Flink 集群的控制元素。它由三个不同的组件组成: 资源管理器(Resource Manager
)、调度器(Dispatcher
)和每个运行中的 Flink 作业的一个作业管理器(JobMaster
)。
JobManager 的内存模型如下:
以上 Total Process Memory 的模型图可以分为以下的 4 个内存组件,如果在分配内存的时候,显示的指定了组件其中的 1 1 1 个或者多个,那么 JVM Overhead
的值就是在其它组件确定的情况下,用 Total Process Size
- 其它获取的值,必须在 min
- max
之间,如果没有指定组件的值,那么就按照 0.1 0.1 0.1 的比例进行计算得到,如果计算出的值小于 min
取 min
,如果大于 max
取 max
,如果 min
、max
指定的相等,那么这个 JVM Overhead
就是一个确定的值!
内存组件 | | |
---|---|---|
JVM Heap | jobmanager.memory.heap.size | JobManager 的 JVM 堆内存大小。这个大小取决于提交的作业个数和作业的结构以及用户代码的要求。主要用来运行 Flink 框架,执行作业提交时的用户代码以及 Checkpoint 的回调代码。 |
Off-Heap Memory | jobmanager.memory.off-heap.size | JM 的对外内存的大小。涵盖了所有 Direct 和 Native 的内存分配。用来执行 akka 等外部依赖,同时也负责运行 Checkpoint 回调及作业提交时的用户代码,有默认值 128 M 128M 128M。 |
JVM Metaspace | jobmanager.memory.jvm-metaspace.size | JM 的元空间大小,有默认值 256 M 256M 256M, 属于 Native Memory。 |
JVM Overhead | jobmanager.memory.jvm-overhead.min jobmanager.memory.jvm-overhead.max jobmanager.memory.jvm-overhead.fraction | JVM 额外开销。为 Thread Stacks,Code Cache,Garbage Collection Space 预留的 Native Memory,有默认的 faction of total process size ,但是必须在其 min & max 之间。 |
在 《Flink 内存管理(一):设置 Flink 进程内存》中我们提到,必须使用下述三种方法之一配置 Flink 的内存(本地执行除外),否则 Flink 启动将失败。这意味着必须明确配置以下选项子集之一,这些子集没有默认值。
序号 | for TaskManager | for JobManager |
---|---|---|
1️⃣ | taskmanager.memory.flink.size | jobmanager.memory.flink.size |
2️⃣ | taskmanager.memory.process.size | jobmanager.memory.process.size |
3️⃣ | taskmanager.memory.task.heap.size 和 taskmanager.memory.managed.size | jobmanager.memory.heap.size |
1.分配 Total Process Size
jobmanager.memory.process.size
此时我们只显示指定了 jobmanager.memory.process.size
的值,没有指定其它组件,此时整个 JobManager 的 JVM 进程能占用的内存为 2000 M 2000M 2000M。
Total Process Size
= 2000 M = 2000M =2000M(这是分配的基准值)JVM Overhead
因为没有指定其它组件内存,所以被按照 0.1 0.1 0.1 的比例推断成: 2000 M × 0.1 × 1024 × 1024 = 209715203 B = 200 M 2000M × 0.1 × 1024 × 1024 = 209715203B = 200M 2000M×0.1×1024×1024=209715203B=200MJVM Metaspace
默认值为 256 M 256M 256MOff-Heap Memeory
默认值为 128 M 128M 128MJVM Heap
最终被推断为 2000 M − 200 M − 256 M − 128 M = 1.38 G 2000M - 200M - 256M - 128M = 1.38G 2000M−200M−256M−128M=1.38G
为啥
JVM Heap
只有 1.33 G B 1.33GB 1.33GB 而不是 1.38 G B 1.38GB 1.38GB 呢?
其实这个取决于你使用的 GC 算法会占用其中很小一部分固定内存作为 Non-Heap
,该占用部分大小为: 1.38 − 1.33 = 0.05 G B 1.38-1.33 = 0.05GB 1.38−1.33=0.05GB。
2.分配 Total Flink Size
jobmanager.memory.flink.size
此时我们只显示指定了 jobmanager.memory.flink.size
的值,也没有指定其它组件如 Heap Size
,此时整个 JobManager 的 JVM 进程除了 JVM Overhead
及 JVM Metaspace
之外能占用的内存为 2000 M 2000M 2000M。
Total Flink Size
= 2000 M = 1.95 G = 2000M = 1.95G =2000M=1.95G(这属于Total Process Size
的组件之一,Overhead
只能最后按剩余的内存来被推断)JVM Metaspace
默认值为 256 M 256M 256M(固定默认值)Off-Heap Memeory
默认值为 128 M 128M 128M(固定默认值)JVM Heap
= 2000 M − 128 M − 80 M B ( G C 算法占用) = 1.75 G B = 2000M - 128M - 80MB(GC算法占用)= 1.75GB =2000M−128M−80MB(GC算法占用)=1.75GB- 根据
JVM Overhead
= = =(JVM Overhead
+Metaspace
256 M 256M 256M +Flink Size
2000 M ) × 0.1 2000 M) ×\ 0.1 2000M)× 0.1,计算可得:Total Process Size
= 2.448 G B = 2.448GB =2.448GBJVM Overhead
= 2.448 G B × 0.1 = 262843055 B = 250.667 M B = 2.448GB × 0.1 = 262843055B = 250.667MB =2.448GB×0.1=262843055B=250.667MB,在 192 M ~ 1 G B 192M~1GB 192M~1GB,为有效
最终资源的分配如以下日志所示:
3.单独分配 Heap Size
jobmanager.memory.heap.size
此时我们只显示指定了 jobmanager.memory.heap.size
的值,相当于显示配置了组件的值,此时整个 JobManager 的 JVM Heap
被指定为最大内存为 1000 M 1000M 1000M。
JVM Heap
被指定为 1000 M 1000M 1000M,但是得从 GC 算法中扣除 41 M B 41MB 41MB,实际JVM Heap
= 959 M B = 959MB =959MBJVM Metaspace
默认值为 256 M 256M 256MOff-Heap Memeory
默认值为 128 M 128M 128MTotal Flink Size
= 1128 M B = 1.102 G B = 1128MB = 1.102GB =1128MB=1.102GBJVM Overhead
= ( 1128 M B + 256 M + = (1128MB + 256M + =(1128MB+256M+JVM Overhead
) × 0.1 ) × 0.1 )×0.1JVM Overhead
= 153.778 < 192 M B = 153.778 < 192MB =153.778<192MB(默认的min
),所以JVM Overhead
= 192 M B = 192MB =192MB
Total Process Size
= 1128 M B + 256 M + = 1128MB + 256M + =1128MB+256M+JVM Overhead
= 1576 M B = 1.5390625 G B = 1.539 G B = 1576MB = 1.5390625GB = 1.539GB =1576MB=1.5390625GB=1.539GB
4.分配 Total Process Size 和 Heap Size
由于指定了 heap.size
内存组件的的大小,那么 JVM Overhead
就是取剩余的 Total Process Size
的内存空间。
Total Process Size
= 2000 M B = 2000MB =2000MB &&JVM Heap
= 1000 M B = 1000MB =1000MB,实际只有 959 M B 959MB 959MB,因为减去了 41 M B 41MB 41MB 的 GC 算法占用空间JVM Metaspace
默认值为 256 M 256M 256MOff-Heap Memeory
默认值为 128 M 128M 128MTotal Flink Size
= 1000 M B + 128 M B = 1128 M B = 1000MB + 128MB = 1128MB =1000MB+128MB=1128MBJVM Overhead
= 2000 M B − 1128 M B − 256 M B = 616 M B = 2000MB - 1128MB - 256MB = 616MB =2000MB−1128MB−256MB=616MB
5.分配 Total Flink Size 和 Heap Size
由于指定了 head.size
组件的大小,那么 Overhead
就按照剩余 Total Process Size
的内存空间分配。
Total Flink Size
= 2000 M B = 2000MB =2000MB &&JVM Heap
= 1000 M B = 1000MB =1000MB,实际 959 M B 959MB 959MB,减去了 GC 算法的占用空间JVM Off-Heap
= 2000 M B − 1000 M B = 1000 M B = 2000MB - 1000MB = 1000MB =2000MB−1000MB=1000MBJVM Metaspace
= 256 M B = 256MB =256MB- 首先根据
JVM Overhead
= ( = ( =(JVM Overhead
+ + +Metaspace
256 M 256M 256M + + +Flink Size
2000 M ) × 0.1 2000M) × 0.1 2000M)×0.1Total Process Size
= 2.448 G B = 2.448GB =2.448GBJVM Overhead
= 2.448 G B × 0.1 = 262843055 B = 250.667 M B = 2.448GB × 0.1 = 262843055B = 250.667MB =2.448GB×0.1=262843055B=250.667MB,在 192 M ~ 1 G B 192M~1GB 192M~1GB,为有效
- 最终确定
Total Process Size
= 2.448 G B = 2.448GB =2.448GB &&JVM Overhead
= 250.667 M B = 250.667MB =250.667MB
相关文章:

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
《Flink 内存管理》系列(已完结),共包含以下 4 篇文章: Flink 内存管理(一):设置 Flink 进程内存Flink 内存管理(二):JobManager 内存分配(含实际…...

(2024,Sora 逆向工程,DiT,LVM 技术综述)Sora:大视觉模型的背景、技术、局限性和机遇回顾
Sora: A Review on Background, Technology, Limitations, and Opportunities of Large Vision Models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. 背景 2.1…...

MySQL基础(二)
文章目录 MySQL基础(二)1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…...

el-table 多选表格存在分页,编辑再次操作勾选会丢失原来选中的数据
el-table表格多选时,只需要添加type"selection", row-key及selection-change,如果存在分页时需要加上reserve-selection,这里就不写具体的实现方法了,可以查看我之前的文章,这篇文章主要说一下存…...

备战蓝桥杯————如何判断回文链表
如何判断回文链表 题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2:…...

linux 文本编辑命令【重点】
目录 vi&vim介绍 vim安装 vim使用 查找命令 find grep 文本编辑的命令,主要包含两个: vi 和 vim vi&vim介绍 作用: vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本 语法: vi file…...
C#面:ref 和 out 的区别
ref 关键字: 在使用 ref 关键字时,传递的参数必须在方法调用之前进行初始化。在方法内部,对 ref 参数的任何修改都会影响到原始变量。ref 参数在方法内部和外部都必须具有相同的类型。 out 关键字 out 参数在方法内部必须被赋值。在使用 ou…...

php脚本输出中文在浏览器中显示乱码
问题说明 这个问题一般出现在较低版本的php中,原因是php和浏览器的字符解析方式不对应 ,导致中文字符被错误解析成乱码 (注,此处的php版本任意切换是依赖于小皮面板(phpstudy)实现的,感兴趣可以…...

【Unity每日一记】角色控制器Character Contorller
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:Uni…...
Kafka入门介绍一
介绍 Kafka是一个分布式系统,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以部署在本地和云中的裸机硬件、虚拟机和容器上环境。 服务器:Kafka作为一个或多个服务器的群集运行,这些服务器可以跨越多个数据中心或云…...

leetcode 3.反转链表;
1.题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 2.用例: 3.题目解析: (1)函数头: 要求返回结点,就 ListNode* reverseList(ListNode* head)&…...

【蓝桥杯】快读|min和max值的设置|小明和完美序列|顺子日期|星期计算|山
目录 一、输入的三种方式 1.最常见的Scanner的输入方法 2.数据多的时候常用BufferedReader快读 3.较麻烦的StreamTokenizer快读(用的不多) StreamTokenizer常见错误: 二、min和max值的设置 三、妮妮的翻转游戏 四、小明和完美序列 五…...

半小时到秒级,京东零售定时任务优化怎么做的?
导言: 京东零售技术团队通过真实线上案例总结了针对海量数据批处理任务的一些通用优化方法,除了供大家借鉴参考之外,也更希望通过这篇文章呼吁大家在平时开发程序时能够更加注意程序的性能和所消耗的资源,避免在流量突增时给系统…...

stm32——hal库学习笔记(ADC)
这里写目录标题 一、ADC简介(了解)1.1,什么是ADC?1.2,常见的ADC类型1.3,并联比较型工作示意图1.4,逐次逼近型工作示意图1.5,ADC的特性参数1.6,STM32各系列ADC的主要特性 …...

一周学会Django5 Python Web开发-Http请求HttpRequest请求类
锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频,包括:2024版 Django5 Python we…...

element el-date-picker 日期组件置灰指定日期范围、禁止日期范围日期选择
JS如何将当前日期或指定日期转时间戳_javascript技巧_脚本之家 小于指定日期前的日期置灰 比如这里 指定日期是 2024-02-20 10:48:15 disabledDate(time) time是一个函数提供的时间用于比较 他是一个时间戳↓ 理解为我们想要置灰的时间 time.getTime() < timeStamps- 1 *…...

202434读书笔记|《繁星·春水》——残花缀在繁枝上,鸟儿飞去了,撒得落红满地,生命也是这般的一瞥么?
202434读书笔记|《繁星春水》——残花缀在繁枝上,鸟儿飞去了,撒得落红满地,生命也是这般的一瞥么? 繁星春水 《繁星春水》冰心著,共300多首小诗,并不是惊艳,就那么平凡而朴实的看完了。 繁星 黑…...
Golang 关于 interface 接口的理解
package mainimport "fmt"// 定义一个存储器接口:支持mysql存储、redis存储 type StorageManager interface {insert(data string) int // 增加update(id int, data string) int // 更新 }// 实现一个Mysql存储器 type Mysql struct{}func (mysql…...

SQL注入漏洞解析--less-7
我们先看一下第七关 页面显示use outfile意思是利用文件上传来做 outfile是将检索到的数据,保存到服务器的文件内: 格式:select * into outfile "文件地址" 示例: mysql> select * into outfile f:/mysql/test/one f…...

java高级——反射
目录 反射概述反射的使用获取class对象的三种方式反射获取类的构造器1. 获取类中所有的构造器2. 获取单个构造器 反射获取构造器的作用反射获取成员变量反射变量赋值、取值获取类的成员方法反射对象类方法执行 反射简易框架案例案例需求实现步骤代码如下 反射概述 什么是反射 反…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...