我正在尝试在 Flink 任务管理器上运行作业,但出现此异常:
Initializing the input processing failed: Too little memory provided to sorter to perform task. Required are at least 12 pages. Current page size is 32768 bytes.
我已经通过 flink-conf.yml 在任务和作业管理器中设置了堆大小,还有什么我应该更改以增加内存的吗?
taskmanager.heap.size: 4096m
taskmanager.memory.size: 4096m
jobmanager.heap.size: 2048m
错误消息指示排序器未获取足够的内存页。原因是可用的托管内存不足。有多种方法可以解决此问题:
- 通过
taskmanager.heap.size
增加TaskManager
的可用内存 - 增加通过
taskmanager.memory.fraction
从taskmanager.heap.size
获取的托管内存的比例(默认情况下为 0.7) - 通过
taskmanager.memory.segment-size
减小页面大小 - 减少
TaskManager
上的插槽数,因为每个 TM 的并行度降低将减少 TM 上的内存使用者数量(操作员获得更大份额的可用内存)
如果您只运行批处理加载,则还应激活taskmanager.memory.preallocate: true
这将在启动时启用内存分配。这通常更快,因为它减少了垃圾回收压力。
关于taskmanager.memory.size
的另一个评论:此值始终需要小于或等于taskmanager.heap.size
,因为它指定了整个堆空间中将用于托管内存的内存量。如果未指定此参数,则 Flink 将占用托管内存的一小部分可用堆内存(通过taskmanager.memory.fraction
指定)。