Flink 内存模型各部分大小计算公式

embedded/2025/2/11 7:58:01/

Flink 的运行平台

如果 Flink 是运行在 yarn 或者 standalone 模式的话,其实都是运行在 JVM 的基础上的,所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager ,他们 JVM 内存的大小都是一样的,都是由 JVM metaspace 和 JVM overhead 组成的。metaspace 元空间的部分,保存 JVM 中 class 类等区域,然后 JVM overhead 是本地内存、垃圾回收等。

在 yarn 环境下,启动的启动程序为 YarnTaskExecutorRunner 入口类型。一个例子为


bigdata  30032 29862  2  2024 ?        3-07:08:13 /usr/bin/java 
-Xmx1664299798 
-Xms1664299798 
-XX:MaxDirectMemorySize=493921243 
-XX:MaxMetaspaceSize=268435456 
-Dlog.file=/path/to/container_e09_xx/taskmanager.log 
-Dlog4j.configuration=file:./log4j.properties 
-Dlog4j.configurationFile=file:./log4j.properties org.apache.flink.yarn.YarnTaskExecutorRunner 
-D taskmanager.memory.network.min=359703515b 
-D taskmanager.cpu.cores=2.0 
-D taskmanager.memory.task.off-heap.size=0b 
-D taskmanager.memory.jvm-metaspace.size=268435456b 
-D external-resources=none 
-D taskmanager.memory.jvm-overhead.min=429496736b 
-D taskmanager.memory.framework.off-heap.size=134217728b 
-D taskmanager.memory.network.max=359703515b 
-D taskmanager.memory.framework.heap.size=134217728b 
-D taskmanager.memory.managed.size=1438814063b 
-D taskmanager.memory.task.heap.size=1530082070b 
-D taskmanager.numberOfTaskSlots=2 
-D taskmanager.memory.jvm-overhead.max=429496736b 
--configDir . 
-Dblob.server.port=10751 
-Djobmanager.rpc.address=hadoop0010 
-Djobmanager.memory.jvm-overhead.min=429496736b 
-Dtaskmanager.resource-id=container_e09_1727170467339_0012_01_000004 
-Dweb.port=0 
-Djobmanager.memory.off-heap.size=134217728b 
-Dweb.tmpdir=/tmp/flink-web-ae106a66-21e0-410e-8c8a-2ea943474c5a 
-Dinternal.taskmanager.resource-id.metadata=hadoop0005:30445 
-Djobmanager.rpc.port=18745 
-Drest.bind-address=hadoop0010 
-Drest.address=hadoop0010 
-Djobmanager.memory.jvm-metaspace.size=268435456b 
-Djobmanager.memory.heap.size=3462817376b 
-Djobmanager.memory.jvm-overhead.max=429496736b

JobManager 的入口类是 YarnJobClusterEntrypoint ,一个例子是:

bigdata  12455 12391  0  2024 ?        06:56:25 /usr/bin/java 
-Xmx3462817376 -Xms3462817376 
-XX:MaxMetaspaceSize=268435456 
-Dlog.file=/path/to/application_xxx/container_xxx/jobmanager.log 
-Dlog4j.configuration=file:log4j.properties 
-Dlog4j.configurationFile=file:log4j.properties org.apache.flink.yarn.entrypoint.YarnJobClusterEntrypoint 
-D jobmanager.memory.off-heap.size=134217728b 
-D jobmanager.memory.jvm-overhead.min=429496736b 
-D jobmanager.memory.jvm-metaspace.size=268435456b 
-D jobmanager.memory.heap.size=3462817376b 
-D jobmanager.memory.jvm-overhead.max=429496736b

相关的配置参数是:

  1. -yjm 设置 JobManager 的大小。
  2. -ytm 设置 TaskManager 的大小。
  3. jobmanager.memory.process.size 和 taskmanager.memory.process.size 对应这 -yjm 和 -ytm 的大小。
  4. jobmanager.memory.jvm-overhead.fraction ,这个是设置 JVM overhead 的比例。
  5. taskmanager.memory.network.fraction ,network 部分的内存大小占比
  6. taskmanager.memory.managed.fraction, managed 占的比例大小。
    在这里插入图片描述
    上图是官方 TaskManager 的内存模型。下面按照配置来计算一下各部分的内存大小,看看是否和 YarnTaskExecutorRunner 启动命令中对应的内存大小相同。需要指出的是的使用资源平台是 yarn , -ytm 为 4 gb

先计算,JVM overhead = Math.max( taskmanager.memory.process.size0.1 , 192M), math.max( 41024 *0.1 , 192M) = 409.6 约等于 410 M

MVM metaspace 固定值 256

Network = (Taskmanager.memory.process.size - JVM metaspace - JVM overhead)0.1,(41024 - 256- 410 )*0.1= 343M

Framework off-heap 128M 固定支出。

Managed Memory =( taskmanager.memory.process.size - JVM metaspace - JVM overhead)0.4 , 还需要四舍五入, (41024 - 256- 410)*0.4 / 1024 = 13.4G

TaskHeap = taskmanager.memory.process.size - JVM metaspace - JVM Overhead - Network - Framewokr off-heap - Managed memory - Framework heap = (41024 - 256 - 410 - 343 - 128 - 1.341024 - 128)/1024 = 1.42 G

YarnTaskExecutorRunner 的启动命令中,-Xmx1664299798 -Xms1664299798 两个参数设置的是 heap memory 的大小, 1664299798/1024/1024/1024 = 1.55 G ,task heap + framework heap = 1.42G + 128M = 1.42 + 0.125 = 1.55G

-XX:MaxDirectMemorySize=493921243 代表了 framework off-heap + task off-heap + network off-heap = 128M + 343M = 0.46G , 493921243/1024/1024/1024 = 0.46 G 。
-XX:MaxMetaspaceSize=268435456 268435456/1024/1024 = 256 M

-D taskmanager.memory.network.min=359703515b 这个是 network 的最小值。
-D taskmanager.cpu.cores=2.0 设置 taskmanager core 的数量
-D taskmanager.memory.task.off-heap.size=0b ,这个和结果是一致的 task off-head 就是 0 。
-D taskmanager.memory.jvm-metaspace.size=268435456b , 这个与 -XX:MaxMetaspaceSize 的大小是一致的。
-D taskmanager.memory.jvm-overhead.min=429496736b ,这个 overhead 的最小值。
-D taskmanager.memory.framework.off-heap.size=134217728b , 这个是 fremework off-heap 的 128 M , 这个是固定大小。
-D taskmanager.memory.network.max=359703515b 这个是 network off-heap 的最大值
-D taskmanager.memory.framework.heap.size=134217728b 固定大小,128 M
-D taskmanager.memory.managed.size=1438814063b ,managed memory 的大小,计算得来的大小是 13.4G ,正好是 1438814063/1024/1024/1024 的大小。
-D taskmanager.memory.task.heap.size=1530082070b
-D taskmanager.numberOfTaskSlots=2 ,这个是每个 taskmanager slot 的个数。
-D taskmanager.memory.jvm-overhead.max=429496736b 这个是 overhead 的大小, 它是 410 M ,正好是429496736/1024/1024/1024 的大小。

所以对于 yarn 平台来说,要想了解 TM 和 JM 各部分内存的大小,只需要知道下面的参数的大小即可。

  1. -yjm
  2. -yjm
  3. jobmanager.memory.jvm-overhead.fraction ,这个是设置 JVM overhead 的比例。
  4. taskmanager.memory.network.fraction ,network 部分的内存大小占比
  5. taskmanager.memory.managed.fraction, managed 占的比例大小。

http://www.ppmy.cn/embedded/161275.html

相关文章

DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索

DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索 在人工智能领域,大型语言模型(LLMs)的发展日新月异,其在自然语言处理和生成任务中的表现逐渐接近人类水平。然而,如何进一步提升这些模型的推理能…

Oracle常见语法

一、求交集 SELECT column1, column2 FROM table1 INTERSECT SELECT column1, column2 FROM table2;INTERSECT 操作符是 Oracle 和一些其他数据库(如 PostgreSQL 和 SQL Server)特有的集合操作符,在 MySQL 中并不直接支持。MYSQL同效果代码&a…

DeepSeek + IDEA 辅助编程王炸组合

DeepSeek + IDEA 辅助编程王炸组合 2025年的春节可以说是人工智能在中国史上飘红的一段历史时刻,年后上班的第一天,便马不停蹄的尝试新技能。今天的科技在飞速发展,编程领域的人工智能工具犹如雨后春笋般涌现。 其中,DeepSeek 则以其卓越的性能和智能化的功能,迅速在众多…

【PG】DROP TABLE ... CASCADE

问题 ERROR: cannot drop table wx_user_tag because other objects depend on it DETAIL: default value for column id of table wx_user_tag depends on sequence wx_user_tag_id_seq HINT: Use DROP … CASCADE to drop the dependent objects too. 解决 这个错误消息表…

Ollama+Chatbox本地部署运行deepseek

文章目录 文件准备安装OllamaSetup加载deepseek模型运行模型安装chatbox运行对比 文件准备 OllamaSetup.exe:链接:https://pan.baidu.com/s/1eXtbNBsxSCr_6_RxinUB_A 提取码:j1lw Chatbox-1.9.1-Setup.exe:链接:https…

全面支持DeepSeek接入,聚铭网络以「AI+安全」重新定义网络防御新范式

当DeepSeek掀起AI浪潮,网络安全如何乘势进化? 春节假期刚刚结束,除了广受好评的电影《哪吒》外,AI领域也迎来了一颗新星——DeepSeek。这款产品在国外被誉为“神秘东方力量”。然而,就在DeepSeek成为全球焦点之际&…

RocketMQ的缺点是什么?Kafka的缺点是什么?使用场景有什么区别?

目录 RocketMQ 的缺点 Kafka 的缺点 RocketMQ 和 Kafka 的使用场景区别 RocketMQ 的使用场景 Kafka 的使用场景 总结 RocketMQ 的缺点 Kafka 的缺点 1. 消息顺序保证能力有限 2. 消息事务功能相对较弱 3. 消息回溯能力有限 使用场景区别 1. RocketMQ 的适用场景 …

博客项目-day02(登录功能)

登录功能 这里使用JWT令牌技术进行登录功能的实现 JWT介绍 需要导入jjwt的依赖 先看接口 传入账号密码返回token 先导入一个JWT工具类 public class JWTUtils {private static final String jwtToken "123456Mszlu!###$$";public static String createToken(Long…