• 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 

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    调优原则,根据程序运行时每块内存的使用情况来调整。

     

  • 相关阅读:
    Spring初始化项目
    JavaScript 作用域
    使用【Blob、Base64】两种方式显示【文本、图片、视频】 & 使用 video 组件播放视频
    leetcode 1382. 将二叉搜索树变平衡
    英文网站的优化设计应该考虑哪些
    iOS ☞ SDWebimage 内存暴增问题
    Actors 基于消息驱动的异步编程模型
    面了个腾讯30k+出来的,他让我见识到什么是基础的天花板
    后端研发工程师面经——JVM
    七、OCR-PaddlePaddle训练源码解析系列-文字识别
  • 原文地址:https://www.cnblogs.com/feizaijiawenzhu/p/16083951.html