当前位置:   article > 正文

flink-taskmanager内存计算_flink 内存计算

flink 内存计算

自flink1.10以后flink重构了taskmanager内存模型,如下图:

其中ProcessMemory=(FlinkMemory+Metaspace+Overhead)

FlinkMemory=(JVMHeap+ManagedMemory+DirectMemory)

JVMHeap=FrameHeap+TaskHeap

DirectMemory=(FramewokOffHeap+TaskOffHeap+Network)

上述内存对应jvm参数

DirectMemory -> -XX:MaxDirectMemorySize

JVMHeap -> -Xms/-Xmx

Metaspace -> -XX:MaxMetaspaceSize

假设运行时候有如下参数:

  1. -Dtaskmanager.numberOfTaskSlots=2 \
  2. -Dtaskmanager.memory.process.size=12g \
  3. -Dtaskmanager.memory.managed.fraction=0.5 \
  4. -Dtaskmanager.memory.jvm-overhead.fraction=0.4 \

由于我配置了memory.process.size则flink计算内存时候会通过ProcessMemoryUtils#deriveProcessSpecWithTotalProcessMemory这个方法进行内存计算,时序图如下:

 咱们按照这个方法来计算下各个区域的内存大小:

区域大小备注
TotalProcessMemory

12288m(12g)

向yarn/k8s申请的进程可以使用的最大内存
MetaspaceMemory256m(0.25g)默认值
OverheadMemory

1024m(1g)

计算规则TotalProcessMemory*jvm-overhead.fraction=4.8gb

但是因为jvm-overhead.max是1gb,所以就取1gb

TotalFlinkMemory

11008m(10.75g)

12288-1024-256
ManagedMemory

5504m(5.375g)

TotalFlinkMemory*managed.fraction
NetworkMemory

1024m(1g)

TotalFlinkMemory*network.fraction=11008*0.1=1100.8mb

但是因为taskmanager.memory.network.max为1gb所以就是1gb

frameworkOffHeapMemory
 
128m(0.125gb)默认值
taskOffHeapMemory128m(0.125gb)默认值
HeapMemory4224m(4.125gb)TotalFlinkMemory-ManagedMemory-NetworkMemory-frameworkOffHeapMemory-taskOffHeapMemory

下图是flink-ui界面的内存分配

该界面中四舍五入保留2位小数点,内存与上述表格中一致。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/696347
推荐阅读
相关标签
  

闽ICP备14008679号