flink内存模型详解与案例
任务提交时的一些yarn设置(通用客户端模式)
指定并行度 -p 5 \
指定yarn队列 -Dyarn.application.queue=xxx \
指定JM总进程的大小 -Djobmanager.memory.process.size=1024mb \
指定每个TM的总进程大小,一般是 2-8g,yarn默认最大给8g -Dtaskmanager.memory.process.size=1024mb \
指定每个TM的slot数 -Dtaskmanager.numberOfTaskSlots=2 \
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
flink 内存模型如下图:

1.flink框架内存使用了堆上内存和堆外内存,不计入slot资源
2、task执行的内存使用了堆上内存和堆外内存
3、网络缓冲内存:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区
4、框架堆外内存、task堆外内存、网络缓冲内存,都在堆外的直接内存里。
5、管理内存:flink管理的堆外内存。用于管理排序、哈希表、缓存中间结果及RocksDB State Backend 的本地内存
6、jvm特有内存:jvm本身占用的内存,包括元空间和执行开销
7、flink使用内存=框架堆内和堆外内+Task堆内和堆外内存+网络缓冲内存+管理内存
8、进程内存=Flink内存+jvm特有内存
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内存模型详解:
jvm特定内存:jvm本身使用的内存,包含jvm的metaspace和over-head
①JVM metaspace:jvm元空间
taskmanager.memory.jvm-metaspace.size 默认256mb
②JVM over-head执行开销:JVM执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。
taskmanager.memory.jvm-overhead.fraction, 默认0.1
taskmanager.memory.jvm-overhead.min, 默认192mb
taskmanager.memory.jvm-overhead.max, 默认1gb
总进程内存*fraction,如果小于配置的min或大于配置的max,则使用min/max
框架内存:flink框架,即TaskManager本身所占用的内存,不计入slot的资源中。
堆内:taskmanager.memory.framework.heap.size, 默认128mb
堆外:taskmanager.memory.framework.off-heap.size,默认128mb
Task内存:Task执行用户代码时所使用的内存
堆内:taskmanager.memory.task.heap.size,默认none,由flinl内存口扣除掉其他部分的内存得到、
堆外:taskmanager.memory.task.off-size,默认0,表示不使用堆外内存
网络内存:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区
堆外:taskmanager.memory.network.fraction,默认0.1
taskmanager.memory.network,min,默认64mb
taskmanager.memory.network.max,默认1gb
flink内存*fraction,如果小于配置的min或大于配置的max,则使用min/max
管理内存:用于RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。
堆外:taskmanager.memory.managed.fraction,默认0.4
taskmanager.memory.managed.size,默认none
如果size没指定,则等于flink内存*fraction
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实际案例
基于yarn模式,一般参数指定的是总进程内存,taskmanager.memory.process.size,
如果该大小为4G,每一块内存得到大小如下:
①计算flink内存
jvm元空间256m
jvm执行开销:4g*0.1=409.6,在[192.1g]之间,最终结果409.6m
flink内存=4g-256m-409.6m=3430.4m
②网络内存=3430.4*0.1=343.04,在[64m,1g]之间,最终结果343.04m
③托管内存=3430.4m*0.4=1372.16m
④框架内存,堆内和堆外都是128m
⑤Task堆内内存=3430.4m-128m-128m-343.04m-1372.16m=1459.2m 堆内内存是总内存减去所有其他的内存。在总大小不变的情况小想调大堆内内存,就把其他内存调小。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
提交程序,查看flink ui结果。和计算的几乎一致


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JVM参数与内存
jvm Options:
-Xmx1664299798
-Xms1664299798 jvm堆内内存大小(最大与最小) 约1587m=Task堆内+框架堆内

-XX:MaxDirectMemorySize=493921243 jvm堆外内存大小 约471m=Task堆外+框架堆外+网络内存

-XX:MaxMetaspaceSize=268435456 jvm元空间大小,约256m
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
调优原则,根据程序运行时每块内存的使用情况来调整。

flink内存模型详解与案例的更多相关文章
- 云时代架构阅读笔记六——Java内存模型详解(二)
承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...
- Java 内存模型详解
概述 Java的内存模型(Java Memory Model )简称JMM.首先应该明白,Java内存模型是一个规范,主要规定了以下两点: 规定了一个线程如何以及何时可以看到其他线程修改过后的共享变量 ...
- 02-java性能调优-JVM内存模型详解
JVM整体结构与内存模型之间的关系 JVM整体结构图如下: 先贴一个代码: package com.jvm.jvmCourse2; public class Math { public static ...
- Java虚拟机:内存模型详解
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 我们都知道,当虚拟机执行Java代码的时候,首先要把字节码文件加载到内存,那么这些类的信息都存放在内存中的哪个区域呢?当我们创建一个对象实 ...
- java内存模型详解
对于本篇文章,将从四个概念来介绍:内存模型基础,重排序,顺序一致性和happens-before 1.内存模型基础 在并发编程中,有两个关键问题:线程之间如何通信和如何同步.由此而引出了两种并发模型: ...
- 深度历险:Redis 内存模型详解
https://mp.weixin.qq.com/s/Gp6Ur7omGY6ZqDWygU2meQ Redis 是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说 Redi ...
- JVM内存模型详解
内存模型 内存模型如下图所示 堆 堆是Java虚拟机所管理的内存最大一块.堆是所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域唯一的目的就是存放对象实例.所有的对象实例都在这里分配内存 Ja ...
- JMM内存模型详解(一)
本文开始死磕JMM(Java内存模型)由于知识点较多,分来写 该文为JMM第一篇 技术往往是枯燥的,本文文字较多 1. JMM是什么? 其实JMM很好理解,我简单的解释一下,在Java多线程中我们经常 ...
- 云时代架构阅读笔记五——Java内存模型详解(一)
什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...
随机推荐
- PyTorch 中 torch.matmul() 函数的文档详解
官方文档 torch.matmul() 函数几乎可以用于所有矩阵/向量相乘的情况,其乘法规则视参与乘法的两个张量的维度而定. 关于 PyTorch 中的其他乘法函数可以看这篇博文,有助于下面各种乘法的 ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- ts转js运行报错:“tsc : 无法加载文件
一.在typescript.ts转换成.js运行时报错解决办法: 1.第一步:鼠标在vscode软件上右击打开属性–>兼容性–>以管理员的身份运行此程序,如下图: 2.第二步:打开vsco ...
- C# Stopwatch计时统计
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- Python回顾笔记(此讲大致说明,详情请看之前的笔记)
内容概要 数据分析(numpy,pandas,matplib) 数据清洗 爬虫 teableau软件 今日内容概要 Python知识回顾 数据分析 ipython模块 anaconda软件 numpy ...
- MySQL第四讲
昨日内容回顾 表与表之间建关系(外键) """ 表与表之间最多只有四种关系 一对多 多对多 一对一 没有关系 在确定表与表之间的关系的时候记住一句话 换位思考 " ...
- ASP.NET Core 6框架揭秘实例演示[16]:内存缓存与分布式缓存的使用
.NET提供了两个独立的缓存框架,一个是针对本地内存的缓存,另一个是针对分布式存储的缓存.前者可以在不经过序列化的情况下直接将对象存储在应用程序进程的内存中,后者则需要将对象序列化成字节数组并存储到一 ...
- http1.1与http2.0
简介 http1.0: 1.0版本中每个TCP连接只能发送一个请求,数据发送完毕连接就关闭,如果还要请求其他资源,就必须重新建立TCP连接.(TCP为了保证正确性和可靠性需要客户端和服务器三次握手和四 ...
- php 代码上线
1:php软件界面点击Tools按步骤进行即可 2:二步 3:三步 user name 为root 4:四步 5:五步
- 2.4 C++STL deque容器详解
文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...