通过调整任务管理器和应用程序 master 的 jvm 内存参数可以解决内存不足的问题。具体方法是增加你的 jvm 堆最大内存参数 -Xmx 参数的值。
可以为任务管理器和应用程序 Master 启动脚本添加以下参数:
export JVM_ARGS="-Xmx4g -XX:MaxMetaspaceSize=512m"
上述示例中,我们为任务管理器和应用程序 Master 的 jvm 堆大小分配了 4GB 的内存,而元空间大小则为 512MB。
Flink 运行时尝试使用堆内存,包括所有的用户代码和框架使用的二进制数据。因此,一个占用大量内存的任务可能会导致 TaskManager OOM。减少 TaskManager 堆内存可以减轻这个问题。
通过在 flink-conf.yaml 文件中设置 MEMORY_OFF_HEAP,可以限制 TaskManager 的堆大小:
taskmanager.memory.process.size: 2048m
taskmanager.memory.managed.size: 1024m
taskmanager.memory.task.heap.size: 1024m
taskmanager.memory.task.off-heap.size: 512m
上述示例中,TaskManager 的总堆内存上限为 2048MB,配置了 Flink 的 off-heap 内存为 512MB,使 TaskManager 的堆内存上限为 1024MB。