当前位置: 首页 > news >正文

flink 内存配置(三):设置JobManager内存

flink 内存配置(一):设置Flink进程内存

flink 内存配置(二):设置TaskManager内存

flink 内存配置(三):设置JobManager内存

flink 内存配置(四):内存调优和问题处理

flink 内存配置(五):网络缓存调优

JobManager是Flink集群的控制元素。Flink由3部分组成:资源管理器(Resource Manager)、调度器(Dispatcher)和每个运行的Flink作业对应的JobMaster。注意下面的讲解适用于JobManager 1.11之后的版本。

1. JobManager内存模型

下表列出了如上所述的所有内存组件,以及影响各个组件大小的Flink配置选项。

组件配置项描述
JVM Heapjobmanager.memory.heap.sizeJobManager 的 JVM 堆内存大小
Off-heap Memoryjobmanager.memory.off-heap.sizeJobManage的堆外内存大小。此选项涵盖所有堆外内存使用,包括直接内存分配和本地内存分配。
JVM metaspacejobmanager.memory.jvm-metaspace.sizeFlink JVM进程的元空间大小
JVM Overhead

jobmanager.memory.jvm-overhead.min

jobmanager.memory.jvm-overhead.max

jobmanager.memory.jvm-overhead.fraction

为其他JVM开销预留的本机内存:例如线程堆栈、代码缓存、垃圾收集空间等,它是总进程内存的一个受限制的分块组件

2. 配置 JVM Heap

如前面章节 flink 内存配置(一):设置Flink进程内存 里所讲的,为JobManger设置内存的方法,除了直接设置 jobmanager.memory.process.size或 jobmanager.memory.flink.size以外,另外的方法就是设置具体组件的配置,比如这里的JVM配置。

JVM Heap主要用来运行 Flink 框架,执行作业提交时的用户代码以及 Checkpoint 的回调代码等。所需的JVM Heap大小主要由运行作业的数量、它们的结构和用户代码的需求来决定。

注意:如果显示配置了 JVM Heap大小,就不要再去配置  jobmanager.memory.process.size 和 jobmanager.memory.flink.size了,容易引起配置冲突。

Flink脚本和CLI在启动JobManager进程时,可以通过JVM参数-Xms和-Xmx来设置JVM堆大小。

3. 配置Off-heap Memory

堆外内存包含了所有类型的JVM直接内存和本地内存。因此,你还可以通过设置jobmanager.memory.enable-jvm-direct-memory-limit 选项来启用JVM直接内存限制。如果配置了此选项,Flink将通过相应的JVM参数-XX:MaxDirectMemorySize将限制设置为堆外内存大小。

堆外内存可以通过 jobmanager.memory.off-heap.size来设置,这个选项可以被调优,假如 JobManager 抛出 ‘OutOfMemoryError: Direct buffer memory’。

堆外内存的主要消耗用于 Flink框架依赖关系(例如Akka网络通信),执行作业提交时的用户代码以及 Checkpoint 的回调代码等。

注意:如果用户明确配置了Flink总内存(Total Flink Size)和JVM堆(JVM Heap),但没有配置堆外内存,那么堆外内存的大小就是Flink总内存减去JVM堆的大小。堆外内存选项的默认值将被忽略。

4. 本地执行

如果在本地(例如从IDE)运行Flink,而没有创建集群,那么JobManager内存配置选项将被忽略。

5. 实际配置效果展示

注意和上图的内存模型组成和各个配置项在不配置的时候的默认值结合着分析。即:

  • Total Process Size = Total Flink Size + JVM Metaspace + JVM Overhead
  • Total Flink Size = Total Heap Size + Total Off-Heap Size
  • JVM Heap Size = jobmanager.memory.heap.size
  • Total Off-Heap Size = jobmanager.memory.off-heap.size(默认值128m)
  • JVM Metaspace = jobmanager.memory.jvm-metaspace.size(默认值256m)
  • JVM Overhead = Total Process Size * jobmanager.memory.jvm-overhead.fraction(默认值0.1)
  • 其他配置值都可以在官网配置页面查看,注意有些 fraction会有对应的最大最小值限制范围。

情况1:只配置 Total Process Size

这里配置 Total Process Size 为 2048m,即 -DJobmanager.memory.process.size=2048m

(这里选择使用application mode 运行在yarn上,温馨提示小心 flink-conf.yaml对命令的影响,导致配置冲突),运行命令:

./bin/flink run-application -t yarn-application -Djobmanager.memory.process.size=2048m ./examples/streaming/TopSpeedWindowing.jar

可以看下内存是如何计算出以上配置值的:(下面值乘以系数的做了四舍五入处理,为了和图对应)

  • 首先只配置了 Total Process Size = 2048m,其他就都是取默认值或推导计算出。
  • JVM Metaspace = 256m
  • JVM Overhead = 2048m * 0.1 = 205m
  • Total Flink Size = 2048m - 256m - 205m = 1587m
  • JVM Heap没配置,等待被计算出来
  • Total Off-Heap Size = 128m
  • JVM Heap = 2048m - 256m - 205 - 128m = 1459m(1.42g),注意上图JVM Heap右边对应的,Metric里不是1.42g,而是1.37g,是因为你使用的 GC 算法会占用其中很小一部分固定内存作为 Non-Heap,可以见下面 Advanced里的 JVM(Heap/Non-Heap)Memory图。

从jobmanager日志上也能看到内存分配值:

情况2:只配置 Total Flink Size

这里配置 Total Flink Size 为 2048m,即 -DJobmanager.memory.flink.size=2048m

(这里选择使用application mode 运行在yarn上),运行命令:

./bin/flink run-application -t yarn-application -Djobmanager.memory.flink.size=2048m ./examples/streaming/TopSpeedWindowing.jar

可以看下内存是如何计算出以上配置值的:(下面值乘以系数的做了四舍五入处理,为了和图对应)

  • 首先只配置了 Total Flink Size = 2048m,其他就都是取默认值或推导计算出。
  • JVM Metaspace = 256m
  • Total Off-Heap Size = 128m
  • JVM Heap = 2048m - 128m = 1920m(1.88g)
  • Total Process Size = Total Flink Size + JVM Metaspace + JVM Overhead,带入具体数值转化成:Total Process Size = 2048m + 256m + (Total Process Size)*0.1,得到 Total Process Size=2560m
  • JVM Overhead = 2560m * 0.1 = 256m

从jobmanager日志上也能看到内存分配值:

情况3:分配各个组件具体值

这种情况和以上两种并没区别,都是按公式一步步导出即可,这里不再举例。

相关文章:

flink 内存配置(三):设置JobManager内存

flink 内存配置(一):设置Flink进程内存 flink 内存配置(二):设置TaskManager内存 flink 内存配置(三):设置JobManager内存 flink 内存配置(四)…...

蓝桥杯 Python组-神奇闹钟(datetime库)

神奇闹钟 传送门: 0神奇闹钟 - 蓝桥云课​​​​​​ 问题描述 小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 11 日 00:00:00)开始,每经过 x 分钟,这个闹钟便会触发一次闹铃 (…...

解决阿里云三个月证书过期 免费SSL证书部署教程

相信有上线过自己的网站、小程序经验的同学深有体会,给服务加上 SSL 证书还挺麻烦的,尤其是没有运维经验的同学。本来最省事的方法是买个证书,但是一看价格,还是算了吧,动辄就是几万块一年。作为个人来说,这…...

VBA03-变量

一、什么是变量 变量是一个自定义名称的储存单位,变量是一个载体。 二、代码调试 在代码逐句运行的过程中查看变量的存储内容。 2-1、示例1 2-2、示例 三、变量的数据类型 若是定义的数据类型的变量,存储了超出了她范围的数,则会报溢出。 注…...

docker-ce-stable‘ 下载元数据失败 : Cannot download repomd.xml: Cannot download

看起来你在尝试安装 containerd.io-1.6.32 时遇到了问题,因为 docker-ce-stable 仓库的元数据下载失败。以下是一些可能的解决方案: 1. 检查仓库配置 确保你的 /etc/yum.repos.d/ 目录下的 docker-ce.repo 文件配置正确。你可以尝试手动编辑该文件&…...

C中定义字符串有下列几种形式

字符串常量,char数组,char指针之间的差异 1、字符串常量: 位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为一个字符串存储在内存中。 例如: printf("%s","hello"); /…...

写一个小日历

以下是一个示例&#xff0c;展示了如何创建一个基本的日历 日历 1. HTML 结构 首先&#xff0c;创建一个基本的 HTML 结构&#xff0c;用于展示日历。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta na…...

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片&#xff08;Shard&#xff09;&#xff1a; 将索引数据分割成多个部分&#xff0c;每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理&#xff0c;从而提高系统的扩展性和性能。 在创建索…...

Rust 构建 TCP/UDP 网络服务

第四章 异步编程与网络通信 第二节 构建 TCP/UDP 网络服务 在现代应用程序中&#xff0c;网络通信是核心功能之一。本节将重点介绍如何在 Rust 中构建基本的 TCP 和 UDP 网络服务&#xff0c;涵盖实际的代码示例、最佳实践以及最新的技术方案&#xff0c;以帮助开发者掌握网络…...

docker镜像文件导出导入

1. 导出容器&#xff08;包含内部服务&#xff09;为镜像文件&#xff08;docker commit方法&#xff09; 原理&#xff1a;docker commit命令允许你将一个容器的当前状态保存为一个新的镜像。这个新镜像将包含容器内所有的文件系统更改&#xff0c;包括安装的软件、配置文件等…...

ViT面试知识点

文章目录 VITCLIPBlipSAMLSegFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化&#xff0c;LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization&#xff08;层归一化&#xff0c;简称LayerNorm&#xff09;是一种在深度学习中…...

ChatGPT 和 RAG(检索增强生成)的区别;ChatGPT 和 RAG 的联系

目录 ChatGPT 和 RAG(检索增强生成)的区别 知识来源与利用方式 回答准确性和可靠性 模型架构和复杂性 适用场景 ChatGPT 和 RAG 的联系 ChatGPT 和 RAG(检索增强生成)的区别 知识来源与利用方式 ChatGPT:是基于大规模预训练的语言模型,知识是在预训练过程中从大量的…...

qt获取本机IP和定位

前言&#xff1a; 在写一个天气预报模块时&#xff0c;需要一个定位功能&#xff0c;在网上翻来翻去才找着&#xff0c;放在这里留着回顾下&#xff0c;也帮下有需要的人 正文&#xff1a; 一开始我想着直接调用百度地图的API来定位&#xff0c; 然后我就想先获取本机IP的方…...

CodeQL学习笔记(5)-CodeQL for Java(AST、元数据、调用图)

最近在学习CodeQL&#xff0c;对于CodeQL就不介绍了&#xff0c;目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记&#xff0c;根据个人知识库笔记修改整理而来的&#xff0c;分享出来共同学习。个人觉得QL的语法比较反人类&#xff0c;至少与目前主流的这些OOP语言相比&…...

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…...

前端将网页转换为pdf并支持下载与上传

1.pdf下载 handleExport() {const fixedH document.getElementById("fixed-h");const pageOne document.getElementById("mix-print-box-one");const pageTwo document.getElementById("mix-print-box-two");fixedH.style.height 30vh;pageO…...

Android 依赖统一配置管理(Version Catalogs)

最近升级了Android Studio版本到Koala Feature Drop | 2024.1.2&#xff0c;新建项目后发现项目配置又有变化&#xff0c;默认开始使用了一个名叫 Gradle 版本目录的东西&#xff0c;当然也可以称之为依赖统一配置管理&#xff0c;一开始还有点陌生&#xff0c;但是经过一番了解…...

如何为数据看板产品接入实时行情接口并展示行情

在金融科技领域&#xff0c;实时数据是分析和决策的关键因素。通过AllTick的实时行情API&#xff0c;您可以轻松将实时市场数据集成到数据看板产品中&#xff0c;为用户提供丰富的市场洞察。本文将详细介绍如何使用AllTick API&#xff0c;通过WebSocket协议接收并展示实时市场…...

数据结构 C/C++(实验一:线性表)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释 …...

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;&#x1f929; 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xf…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

多模态学习路线(2)——DL基础系列

目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization&#xff08;RMSNorm&#xff09; 二、激活函数 1. Sigmoid激活函数&#xff08;二分类&…...

uni-app学习笔记二十七--设置底部菜单TabBar的样式

官方文档地址&#xff1a;uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容&#xff0c;通常写在项目的App.vue的onLaunch方法中&#xff0c;用于项目启动时立即执行 重要参数&#xff1a; indexnumber是tabBar 的哪一项&…...