在flink-on-yarn模式下,基于flink1.10版本,如何计算flink jvm-heap内存。
先来张官网 flink-on-yarn的内存分布图:
内存主要分为:整个container内存、flink内存。其中内存类型又分为堆内存和堆外内存。
内存类型主要分为:
1.、JVM Metaspace :默认256M;
2、JVM Overhead内存:默认整个container内存的0.1;
最大值为1G,最小值为192M,如果计算出来的内存大小不在此区间范围内,按照最小值/最大值 分配;例如计算的结果为128M,实际按照192M分配;计算结果为1.2G,实际按照1G分配;
3、Flink Memory = Totoal Memory - JVM Metaspace - JVM Overhead
4、Total Memory :flink job 启动时,按照参数: -ytm 6144 指定的内存大小(单位M)。如果不指定,按照yarn最小Container分配的内存大小。
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
5、Network = Flink Memory *0.1(默认值)
6、Managed Memory = Flink Memory * 0.4(默认值)
7、Task off-heap 默认为0;
8、framework off-heap :默认为128M
如下图:flink-on-yarn 启动时分配的内存为6144M(参数均使用默认值)
Flink Managed Memory = (6144M * 0.9 -256M) *0.4 = 2.06G
JVM(heap/Non-heap) = (6144M * 0.9 -256M)* 0.5 -128 M = 2.45G (约为2509M)
登陆主机查看 JVM GC信息如下:
整个新生代、老年代和持久代 分配的内存为2510M。