对于flink内存的设置,一般我们更关注taskmanager的设置,对于jobmanager,一般不会有内存分配的调优问题,而且相对更简单,本文就不再赘述相关配置,我们设置flink的taskmanager内存大小有三种方式:

(1)设置总内存:total process memory
(2)设置flink总内存:total flink memory
(3)设置各个中间组件本身内存

这里以第一种为例,本程序跑在yarn上,使用参数:-ytm 8192,也就是设置了8G的内存大小,执行时的内存分配方式如下:

这里有两种区分方式:
一是堆外内存和堆内内存来划分:
堆内内存包括flink框架执行所需的堆内存+task运行所需的堆内存。而总内存减去上面的堆内内存就是堆外内存了。
二是flink内存和其他内存
其他内存包括overhead和metaspace,总内存减去其他内存就是flink内存了,我们这里以第二种方式划分。
(1)总内存
首先,来到任务的Jobmanager 的configuration下面可以看到如下配置:

taskmanager.memory.process.size 8gb

说明了 -ytm 这个配置设置的是total process memory,整个taskmanager的内存加一起就是这个数。

(2)JVM overhead 内存
这部分内存呢,flink的任务是java程序是需要跑在jvm上的,但是jvm本身的启动运行也需要内存啊,所以这个配置是jvm本身运行时需要的内存,jvm启动需要内存的地方包括线程堆栈,IO,编译缓存等所需要的内存。这里是200M。

taskmanager.memory.jvm-overhead.max 200M

实际上,该值受到三个值的制约:

taskmanager.memory.jvm-overhead.max 最大值
taskmanager.memory.jvm-overhead.min 最小值
taskmanager.memory.jvm-overhead.fraction 比例

首先,使用fration * 总内存(total process memory) = 0.1 * 8G 差不多800多M,但是这时800M > taskmanager.memory.jvm-overhead.max,所以该值被拉回到200M。不过由于这里没法监控到这部分到底使用了多少,所以显示不出来,鼠标放在圆圈上会显示:

Metrics related to this configuration parameter cannot be monitored. Flink does not have full control over these memory pools.

(3)Jvm元空间
这是Java8之后将大部分永久代换成了元空间,大家都懂这部分,这里没有特别设置,默认使用了256M,主要受到该参数控制:

jobmanager.memory.jvm-metaspace.size

为什么先介绍overhead和metaspace呢,因为总的process内存减去这两部分内存就是flink total memory了。所以这里的

flink total memory = 8G - 200M - 256M

(4)netWork
网络,网络数据交换所需的堆外内存,如网络数据交换缓冲区。这里的值是200M,这里也是个比例值,这里不同于上面overhead的是,这里的值是:比例 * flink内存 而不是乘以总内存,所以计算方法是:

0.1 * (8G - 200M - 256M)

但是同样收到下面三个参数的制约:

taskmanager.memory.network.fraction 0.1 taskmanager.memory.network.max 200M taskmanager.memory.network.min 64mb

最大值不能超过200M,所以被卡在了200M。

(5)task off-heap
任务的堆外内存,默认是0,表示不使用堆外内存

(6)Framework Off-Heap
表示Flink框架本身使用的堆外内存大小,默认128M,由该参数控制,默认128M

taskmanager.memory.framework.off-heap.size

(7)Managed Memory
用于RocksDb的本地内存和批的排序,哈希表,缓存中间结果。该值也是个比例值,默认使用flink内存 * 0.4,由下面参数控制,注意这里也是乘以的flink内存而不是总内存。

taskmanager.memory.managed.fraction 默认0.4
taskmanager.memory.managed.size 默认没有设置

这里默认使用的是fraction来计算,但是该项目中设置了下面的size选项,设置了200M,所以显示的是200M,如果使用了RocksDb作为缓存组件,则应该适当增加该值的大小。而如果不使用RocksDb或者不需要缓存状态,则可将该值设为0.以便将有限的内存留给taskmanager

(8)Task Heap
真正跑任务需要的内存大小,总内存减去其他设置的内存大小就是任务能使用的大小了,这个内存是最重要的跑任务内存,所以在设置了总内存大小的时候,还有观察其他内存的占用情况,可能这里剩下的内存并没有想象的那么大了。

(9)Framework Heap
flink框架本身运行的内存大小,由该值控制,大小默认128M

taskmanager.memory.framework.heap.size

001.flink内存分配机制相关推荐

  1. MySQL • 源码分析 • 内存分配机制

    摘要: 前言 内存资源由操作系统管理,分配与回收操作可能会执行系统调用(以 malloc 算法为例,较大的内存空间分配接口是 mmap, 而较小的空间 free 之后并不归还给操作系统 ),频繁的系统 ...

  2. JAVA入门级教学之(方法内存分配机制)

    目录 JAVA入门级教学之(方法内存分配机制) 1.方法只定义,不调用,是不会执行的 2.在JVM内存划分上有这样三块主要的内存空间:[还有其它的内存空间] 3.关于"栈"数据结构 ...

  3. STL中Vector的内存分配机制

    一些好的公司校园招聘过程中(包括笔试.面试环节),经常会涉及到STL中vector的使用(主要是笔试)及其性能(面试)的分析.今天看了下相关文章,也写了几个小的测试程序跑了跑.算是总结下,希望对需要的 ...

  4. 谈谈 HashMap(int initialCapacity)与内存分配机制

    前言 阅读前请先看看如下几个问题,如果有不清楚的地方看完本文会有收获 关于扩容相关原理与一些巧妙的二进制算法分析参考HashMap巧妙的扩容算法 HashMap(int initialCapacity ...

  5. 32g内存 java开发,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧...

    内存分配机制 逐步分析 类加载检查: 虚拟机遇到一条new指令(new关键字.对象的克隆.对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被 ...

  6. Java 虚拟机内存分配机制

    Java 虚拟机内存分配机制 内存区域划分 对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的"堆"对应内存模型的 Java 堆 ...

  7. linux内存分配机制,Linux内存分配机制:SLAB / SLUB / SLOB

    Linux内存分配机制:SLAB / SLUB / SLOB [日期:2011-07-15] 来源:Linux社区 作者:do2jiang [字体:大 中 小] slob: introduce the ...

  8. Linux内存分配机制之伙伴系统和SLAB

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6539590.html  内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生.这就要求 ...

  9. JVM对象创建与内存分配机制学习总结

    对象的创建过程 1.类加载检查 虚拟机遇到一条new指令时(new关键词.对象克隆.对象序列化等),首先会检查这个类是否已被加载.解析和初始化过.如果没有,要先执行相应的类加载过程. 2.分配内存 内 ...

最新文章

  1. 分享一个自用的,随便找到的组件,留作记录
  2. Android--WebView
  3. android studio编译找不到程序包,【图片】哥哥们,android studio 打包的安装包手机无法识别怎么破【androidstudio吧】_百度贴吧...
  4. 有兴趣吗?程序员分手手册,教你如何恢复单身
  5. 包含Iphlpapi.h 编译错误 error C2065: 'HRASCONN'
  6. #周分享#骨架屏[Skeleton Screen]
  7. Hadoop学习笔记03_Hive练习
  8. PS发光眩光效果插件:BBTools Glow Glare for Mac
  9. macOS卸载Java9及利用Homebrew搭建并配置Java开发环境
  10. scala Ordering
  11. 安卓4.4不支持touchend事件解决办法
  12. MT6763芯片资料MT6763处理器性能介绍
  13. 电路仿真软件用matlab,基于MATLAB的电路仿真软件设计.doc
  14. 使用Roslyn动态编译代码
  15. java更改文件编码方式_java 更改文件编码
  16. 【到底什么才是电角度呢?如何使用示波器精准的测量电角度呢?】
  17. Captain Flint and a Long Voyage
  18. php对接一网通,Android招行一网通对接
  19. linux – Docker:无法添加对接口(不支持操作)
  20. 手机怎么把两寸照改成一寸照?这个方法既简单又好用

热门文章

  1. HTML如何使用隐藏图片,css3如何隐藏图片?
  2. java前台界面设计_前端程序员要懂的 UI 设计知识
  3. Angular2 模型渲染的一个坑
  4. 项目动态|Apache Pulsar 2.10.0 版本介绍
  5. 大自然是最广阔的“感统训练室”,端午节带上孩子“趣”玩吧!
  6. MSDC 4.3 接口规范(3)
  7. 服务器系统做个备份吗,服务器操作系统能做备份吗
  8. 论文阅读:ThinLTO: Scalable and Incremental LTO
  9. 分类算法-决策树、随机森林
  10. 【GlobalMapper精品教程】006:Excel等表格(.xls)或文本(.txt .csv)坐标文件生成矢量点