Flink Yarn模式内存分配失败JobManager memory configuration failed

如题所述

第1个回答  2022-07-29
flink run -d -m yarn-cluster -p 1 -yjm 512M -ytm 1024M -c com.bigdata.FlinkRun xxx.jar

JobManager memory configuration failed: The configured Total Flink Memory (64.000mb (67108864 bytes)) is less than the configured Off-heap Memory (128.000mb (134217728 bytes)).

从报错信息来看,flink的总内存小于堆外内存,可是脚本中 -jym 中jobManager分配的内存是512m,为何这里只剩下了64m呢? 话不多说上源码

JobManagerFlinkMemoryUtils.deriveFromTotalFlinkMemory

FlinkYarnSessionCliTest.testMemoryPropertyWithoutUnit , 通过debug可得到如下的信息

将测试用例中的jobManager的内存改为512, 报错即可重现
通过计算结果符合预期的报错,套用上面的猜想和结合 jvmOptions 的默认配置, 即可计算出堆内存为 64m = 512m - 192m(jvm-overhead.min) - 256(jvm-metaspace.size) , 小于默认的堆外内存所以校验不通过.

计算中的Overhead内存会根据参数 jvm-overhead.fraction 动态调整, 默认为0.1

同理如果taskManager的内存配置小了, 也会报错, 分析定位的方法大概一致

官方的文档有详细的说明, Flink 内存模型 , 在Flink的Dashboard上可以看到JobManager和TaskManager对应的内存模型和JVM的监控信息
相似回答