我正在尝试在 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 上的内存使用者数量(运算符(operator)获得更大份额的可用内存)
如果您只运行批处理加载,那么您还应该激活 taskmanager.memory.preallocate: true
这将在启动时启用内存分配。这通常更快,因为它减少了垃圾收集压力。
有关 taskmanager.memory.size
的另一条评论:此值始终需要小于或等于 taskmanager.heap.size
,因为它指定了总体内存量堆空间将用于托管内存。如果未指定此参数,则 Flink 将占用一部分可用堆内存作为托管内存(通过 taskmanager.memory.fraction
指定)。
关于java - 如何增加 Flink 内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858283/