【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)

news2024/10/6 22:01:20

Flink 内存管理》系列(已完结),共包含以下 4 篇文章:

  • Flink 内存管理(一):设置 Flink 进程内存
  • Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
  • Flink 内存管理(三):TaskManager 内存分配(理论篇)
  • Flink 内存管理(四):TaskManager 内存分配(实战篇)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Flink 内存管理(四):TaskManager 内存分配(实战篇)

  • 1.单独分配 Total Process Size
  • 2.单独分配 Total Flink Size
  • 3.单独分配 Heap Size && Managed Memory
  • 4.分配 Total Process Size 和 Heap Size && Managed Memory
  • 5.分配 Total Flink Size 和 Heap Size && Managed Memory
  • 6.内存分配小结

在 《Flink 内存管理(一):设置 Flink 进程内存》中我们提到,必须使用下述三种方法之一配置 Flink 的内存(本地执行除外),否则 Flink 启动将失败。这意味着必须明确配置以下选项子集之一,这些子集没有默认值。

序号for TaskManagerfor JobManager
1️⃣taskmanager.memory.flink.sizejobmanager.memory.flink.size
2️⃣taskmanager.memory.process.sizejobmanager.memory.process.size
3️⃣taskmanager.memory.task.heap.sizetaskmanager.memory.managed.sizejobmanager.memory.heap.size

1.单独分配 Total Process Size

单独分配 Total Process Size,其它的组件都会自动分配。

taskmanager.memory.process.size: 2000m

在这里插入图片描述

内存分配步骤如下:

  • 首先 Total Process Size = 2000 M = 2000M =2000M
  • 因为没有显示分配组件中的任何参数,所以 JVM Overhead = 2000 M × 0.1 = 200 M = 2000M × 0.1 = 200M =2000M×0.1=200M
  • JVM Metaspace = 256 M = 256M =256M
  • ⭐ 所以 Native Memory = JVM Overhead + JVM Metaspace = 456 M = 456M =456M
  • Total Flink Size = 2000 M − 200 M − 256 M = 1544 M B = 1.508 G B = 2000M - 200M - 256M = 1544MB = 1.508GB =2000M200M256M=1544MB=1.508GB
  • Network Memory = 1544 × 0.1 = 154.4 M = 1544 × 0.1 = 154.4M =1544×0.1=154.4M
  • Task Off-Heap = = = 0 M B 0MB 0MB(默认)
  • Framework Off-Heap = = = 128 M 128M 128M(默认)
  • ⭐ 所以 Total Direct Memory = 154.4 M + 0 + 128 M = 282.4 M = 154.4M + 0 + 128M = 282.4M =154.4M+0+128M=282.4M
  • Managed Memory = 1544 M B × 0.4 = 617.6 M = 1544MB × 0.4 = 617.6M =1544MB×0.4=617.6M
  • Total JVM Heap Memory = 1544 M − 282.4 M − 617.6 M = 644 M B = 1544M - 282.4M - 617.6M = 644MB =1544M282.4M617.6M=644MB
  • Framework Heap = 128 M = 128M =128M
  • Task Heap = 644 M − 128 M = 516 M = 644M - 128M = 516M =644M128M=516M

可以与以下的日志进行对比,完全能对上,😁😁😁!

在这里插入图片描述

2.单独分配 Total Flink Size

taskmanager.memory.flink.size: 2000m

假如直接只分配 taskmanager.memory.flink.size: 2000m

  • Total Flink Size = 2000 M = 2000M =2000M
  • Managed Memory = 2000 M × 0.4 = 800 M = 2000M × 0.4 = 800M =2000M×0.4=800M
  • NetWork Memory = 2000 M × 0.1 = 200 M = 2000M × 0.1 = 200M =2000M×0.1=200M
  • Framework Off-Heap = 128 M = 128M =128M
  • Task Off-Heap = 0 B y t e = 0 M = 0Byte = 0M =0Byte=0M
  • ⭐ 所以 Total Direct Memory = 200 M + 128 M + 0 M = 328 M = 200M + 128M + 0M= 328M =200M+128M+0M=328M
  • Total Off-Heap Memory = 800 M + 328 M = 1128 M = 800M + 328M = 1128M =800M+328M=1128M
  • Total JVM Heap = 2000 M − 800 M − 328 M = 872 M = 2000M - 800M - 328M = 872M =2000M800M328M=872M
  • Framework Heap = 128 M = 128M =128M
  • Task Heap = 872 M − 128 M = 744 M = 872M - 128M = 744M =872M128M=744M
  • JVM MetaSpace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   256 M +\ 256M + 256M Metaspace +   2000 M +\ 2000M + 2000M Total Flink Size ) × 0.1 ) × 0.1 )×0.1,求解 JVM Overhead = 250.667 M = 250.667M =250.667M 192 M B ~ 1 G B 192MB ~ 1GB 192MB1GB,生效
  • Total Process Size = 2000 M + 256 M + 250.667 M = 2506.667 M = 2.448 G B = 2000M + 256M + 250.667M = 2506.667M = 2.448GB =2000M+256M+250.667M=2506.667M=2.448GB

在这里插入图片描述

3.单独分配 Heap Size && Managed Memory

taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Framework Heap = 128 M = 128M =128M(默认)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Total JVM Heap = 1000 M + 128 M = 1128 M = 1.102 G B = 1000M + 128M = 1128M = 1.102GB =1000M+128M=1128M=1.102GB
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Framework Off-Heap = 128 M = 128M =128M
  • Task Off-Heap = 0 M = 0M =0M
  • NetWork = = = Total Flink Size ×   0.1 ×\ 0.1 × 0.1 = ( = ( =(NetWork +   1128 M + 1000 M + 128 M + 0 M ) × 0.1 +\ 1128M + 1000M + 128M + 0M) × 0.1 + 1128M+1000M+128M+0M)×0.1,计算得到 Network = 250.667 M B = 250.667MB =250.667MB,处于 64 M B ~ 1 G B 64MB ~ 1GB 64MB1GB,有效
  • ⭐ 所以 Total Direct Memory = 128 M + 250.667 M = 378.667 M = 128M + 250.667M = 378.667M =128M+250.667M=378.667M
  • Total Flink Size = 1128 M + 1378.667 M = 2506.667 M = 2.448 G B = 1128M + 1378.667M = 2506.667M = 2.448GB =1128M+1378.667M=2506.667M=2.448GB
  • JVM Metaspace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   1128 M + 1000 M + 378.667 M + 256 M ) × 0.1 = 306.963 M +\ 1128M + 1000M + 378.667M + 256M) × 0.1 = 306.963M + 1128M+1000M+378.667M+256M)×0.1=306.963M,处于 192 M ~ 1 G B 192M ~ 1GB 192M1GB,有效
  • Total Process Size = 2506.667 M + 256 M + 306.963 M = 3069.63 M = 2.998 G = 2506.667M + 256M + 306.963M = 3069.63M = 2.998G =2506.667M+256M+306.963M=3069.63M=2.998G

在这里插入图片描述

4.分配 Total Process Size 和 Heap Size && Managed Memory

指定 Total Process Size,同时显式分配组件 JVM HeapMamaged Memory

taskmanager.memory.process.size: 3000m
taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Total Process Size = 3000 M = 3000M =3000M
  • Framework Heap = 128 M = 128M =128M(默认)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Total JVM Heap = = = Framework Heap + + + Task Heap = 128 M + 1000 M = 1128 M = 1.102 G = 128M + 1000M = 1128M = 1.102G =128M+1000M=1128M=1.102G
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Framework Off-Heap = 128 M = 128M =128M(默认)
  • Task Off-Heap = 0 M = 0M =0M(默认)
  • Network Memory = ( = ( =(Network Memory +   1128 M + 1128 M ) × 0.1 = 250.667 M +\ 1128M + 1128M) × 0.1 = 250.667M + 1128M+1128M)×0.1=250.667M,在 64 M ~ 1 G B 64M ~ 1GB 64M1GB 之间,满足要求
  • Total Off-Heap = 1000 M + 128 M + 250.667 M + 0 M = 1378.667 M = 1.346 G B = 1000M + 128M + 250.667M + 0M = 1378.667M = 1.346GB =1000M+128M+250.667M+0M=1378.667M=1.346GB
  • Total Flink Size = 1128 M + 1378.667 M = 2506.667 M = 2.448 G B = 1128M + 1378.667M = 2506.667M = 2.448GB =1128M+1378.667M=2506.667M=2.448GB
  • JVM Metaspace = 256 M = 256M =256M
  • JVM Overhead = 3000 M − 2506.667 M − 256 M = 237.333 M = 3000M - 2506.667M - 256M = 237.333M =3000M2506.667M256M=237.333M,在 192 M ~ 1 G B 192M ~ 1GB 192M1GB 之间,满足要求

在这里插入图片描述

5.分配 Total Flink Size 和 Heap Size && Managed Memory

指定 Total Flink Size,同时显式分配组件 JVM HeapMamaged Memory

taskmanager.memory.flink.size: 3000m
taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Total Flink Size = 3000 M = 2.93 G B = 3000M = 2.93GB =3000M=2.93GB(配置)
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Framework Heap = 128 M = 128M =128M(默认)
  • Total JVM Heap = = = Framework Heap + Task Heap = 128 M + 1000 M = 1128 M = 128M + 1000M =1128M =128M+1000M=1128M
  • Total Off-Heap Memory = 3000 M − 1128 M = 1872 M = 1.828 G B = 3000M - 1128M = 1872M = 1.828GB =3000M1128M=1872M=1.828GB
  • Direct Memory = = = Total Off-Heap Memory - Managed Memory = 1872 M − 1000 M = 872 M = 1872M - 1000M = 872M =1872M1000M=872M
  • Task Off-Heap = 0 M = 0M =0M(默认)
  • Framework Off-Heap = 128 M = 128M =128M(默认)
  • Network Memory = = = Direct Memory − - Task Off-Heap - Framework Off-Heap = 872 M − 0 M − 128 M = 744 M = 872M - 0M - 128M = 744M =872M0M128M=744M
  • JVM Metaspace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   3000 M + 256 M ) × 0.1 +\ 3000M + 256M) × 0.1 + 3000M+256M)×0.1,计算得到 JVM Overhead = 361.778 M = 361.778M =361.778M,处于 192 M ~ 1 G 192M~1G 192M1G 之间,符合条件
  • Total Process Size = 3000 M + 256 M + 361.778 M = 3617.778 M = 3.533 G B = 3000M + 256M + 361.778M = 3617.778M = 3.533GB =3000M+256M+361.778M=3617.778M=3.533GB

在这里插入图片描述

6.内存分配小结

在 Flink 的集群内存分配的过程中,我们大致可以通过 3 3 3 种方式进行分配。

  • 指定 Total Process SizeTotal Flink Size,取决于你用什么方式部署。
  • 单独指定某个组件,比如 Task-Heap 的大小,其它的组件都会被推导出来。
  • 指定 Total Process / Flink Size && Heap or Off-Heap 其中之一,其它的组件通过默认值进行填充或者进推导,如:
    • Total Flink Size = Total Heap Size + Total Off-Heap Size
    • Total Heap Size = Task Heap + Framework Heap
    • Total Off-Heap = Task Off-Heap + Framework Off-Heap + Network Memory + Managed Memory
    • Network = Total Flink Size ×   0.1 ×\ 0.1 × 0.1(没有指定其它组件情况下)
    • JVM Overhead = Total Process Size ×   0.1 ×\ 0.1 × 0.1(没有指定其它组件情况下)
    • … …

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间:2024-02-23 最后编辑时间:2024-02-24 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

C++基础知识(六:继承)

首先我们应该知道C的三大特性就是封装、继承和多态。 此篇文章将详细的讲解继承的作用和使用方法。 继承 一个类,继承另一个已有的类,创建的过程 父类(基类)派生出子类(派生类)的过程 继承提高了代码的复用性 【1】继承的格式 class 类名:父类名 {}; 【…

基于ILI9341的TFT-LCD屏幕显示要点总结

目录 LCD常用引脚及其功能 LCD驱动流程 RGB565 关键指令 GRAM自增方向 设置开始坐标和结束坐标 写GRAM指令 读GRAM指令 本文主要参考视频如下: 第37讲 LCD-TFTLCD原理与配置介绍-M4_哔哩哔哩_bilibili 说明: 目前,市面上常见的TFT-LC…

#FPGA(IRDA)

1.IDE:Quartus II 2.设备:Cyclone II EP2C8Q208C8N 3.实验:IRDA(仿真接收一个来自0x57地址的数据0x22 (十进制34)) 4.时序图: 5.步骤 6.代码: irda_receive.v module irda_receive ( input wire…

记一次生产jvm oom问题

前言 jvm添加以下参数,发生OOM时自动导出内存溢出文件 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/opt 内存分析工具: MAT, 下载地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation, 注意工具地址…

Uncertainty-Aware Mean Teacher(UA-MT)

Uncertainty-Aware Mean Teacher 0 FQA:1 UA-MT1.1 Introduction:1.2 semi-supervised segmentation1.3 Uncertainty-Aware Mean Teacher Framework 参考: 0 FQA: Q1: 不确定感知是什么意思?不确定信息是啥?Q2:这篇文章的精妙的点…

AI绘画工具有哪些?

AI绘画工具是利用人工智能技术来辅助或生成艺术作品的工具。这些工具可以分为两类:一类是生成艺术作品的工具,另一类是辅助艺术创作的工具。本文将介绍一些主流的AI绘画工具,并分析它们的特点和适用场景。 1. DALL-E DALL-E 是由 OpenAI 开发…

并发编程(5)共享模型之不可变

7 共享模型之不可变 本章内容 不可变类的使用不可变类设计无状态类设计 7.1 日期转换的问题 问题提出 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的, 有很大几率出现 java.lang.NumberFormatException 或者出现不正确的日期解析结果,…

Java+SpringBoot,打造极致申报体验

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

web安全学习笔记【16】——信息打点(6)

信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等[1] #知识点: 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-C…

东方博宜 1519. 求1~n中每个数的因子有哪些?

东方博宜 1519. 求1~n中每个数的因子有哪些&#xff1f; #include<iostream> using namespace std; int main() {int n ;cin >> n ;for(int i 1 ; i < n ; i){int a[1000] ;int k 0 ;for(int j 1 ; j < i ; j){if(i%j0){a[k] j ;k ;} }cout << i …

Golang Redis:构建高效和可扩展的应用程序

利用Redis的闪电般的数据存储和Golang的无缝集成解锁协同效应 在当前的应用程序开发中&#xff0c;高效的数据存储和检索的必要性已经变得至关重要。Redis&#xff0c;作为一个闪电般快速的开源内存数据结构存储方案&#xff0c;为各种应用场景提供了可靠的解决方案。在这份完…

从docx提取文本的Python实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

限流算法

下面对常见的限流算法进行讨论。目前&#xff0c;常用的限流算法主要有三种&#xff1a;计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求&#xff0c;则在该…

opengles 顶点坐标变换常用的矩阵(九)

文章目录 前言一、opengles 常用的模型矩阵1. 单位矩阵2. 缩放矩阵3. 位移矩阵4. 旋转矩阵二、第三方矩阵数学库1. glm1.1 ubuntu 上安装 glm 库1.2 glm 使用实例1.2.1 生成一个沿Y轴旋转45度的4x4旋转矩阵, 代码实例如下1.2.2 生成一个将物体移到到Z轴正方向坐标为5处的4x4 vi…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…

数据存储-文件存储

一、CSV文件存储 csv是python的标准库 列表数据写入csv文件 import csvheader [班级, 姓名, 性别, 手机号, QQ] # 二维数组 rows [[学习一班, 大娃, 男, a130111111122, 987456123],[学习二班, 二娃, 女, a130111111123, 987456155],[学习三班, 三娃, 男, a130111111124, …

qt波位图

1&#xff0c;QPainter 绘制&#xff0c;先绘制这一堆蓝色的东西, 2&#xff0c;在用定时器&#xff1a;QTimer&#xff0c;配合绘制棕色的圆。用到取余&#xff0c;取整 #pragma once#include <QWidget> #include <QPaintEvent>#include <QTimer>QT_BEGIN_…