美文网首页
Flink Yarn模式内存分配失败JobManager mem

Flink Yarn模式内存分配失败JobManager mem

作者: 清蒸三文鱼_ | 来源:发表于2021-03-31 17:12 被阅读0次

启动脚本

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

public JobManagerFlinkMemory deriveFromTotalFlinkMemory(
        Configuration config, MemorySize totalFlinkMemorySize) {
    MemorySize offHeapMemorySize =
            ProcessMemoryUtils.getMemorySizeFromConfig(
                    config, JobManagerOptions.OFF_HEAP_MEMORY);
    if (totalFlinkMemorySize.compareTo(offHeapMemorySize) < 1) {
        throw new IllegalConfigurationException(
                "The configured Total Flink Memory (%s) is less than the configured Off-heap Memory (%s).",
                totalFlinkMemorySize.toHumanReadableString(),
                offHeapMemorySize.toHumanReadableString());
    }
    MemorySize derivedJvmHeapMemorySize = totalFlinkMemorySize.subtract(offHeapMemorySize);
    return createJobManagerFlinkMemory(derivedJvmHeapMemorySize, offHeapMemorySize);
}

运行源码中的测试用例

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

ProcessMemoryUtils.deriveProcessSpecWithTotalProcessMemory
这里做一个猜想, Flink JobManager进程总内存 = 堆内存 + 堆外内存 + Metaspace + Overhead
报错重现

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

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


堆外内存默认为128M
在资源充足的情况下建议无需将默认的配置下调, 如果要调整可以从上述的参数进行调整, 在脚本中加入运行参数, 如 -yD jobmanager.memory.off-heap.size=1 -yD jobmanager.memory.jvm-overhead.min=64 等等

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

Flink内存模型

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

JobManager
TaskManager

相关文章

网友评论

      本文标题:Flink Yarn模式内存分配失败JobManager mem

      本文链接:https://www.haomeiwen.com/subject/scxahltx.html