java - 如何增加 Flink 内存大小

标签 java memory apache-flink

我正在尝试在 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

最佳答案

错误信息表明排序器没有获得足够的内存页。原因是可用的托管内存不足。有多种方法可以解决这个问题:

  1. 通过 taskmanager.heap.size 增加 TaskManager 的可用内存
  2. 通过 taskmanager.memory.fraction 增加从 taskmanager.heap.size 获取的托管内存部分(默认为 0.7)
  3. 通过taskmanager.memory.segment-size减少页面大小
  4. 减少 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/

相关文章:

java - 是否应该将 Closeable 用作 .NET 的 IDisposable 的 Java 等效项?

java - Guava CharMatcher中的BREAKING_WHITESPACE和WHITESPACE有什么区别

ubuntu - Ubuntu中的内存分配

c++ - av_bitstream_filter_filter 内存泄漏

scala - 在Flink中,如何将DataStream写入单个文件?

machine-learning - 使用 flink runner 在梁上进行 Tensorflow 变换

java - Gradle 没有找到 tools.jar

java - 如何将值从一个jsp页面发送到另一个页面但重定向到其他页面?

string - 一条推文需要多少字节的内存?

java - 如何以编程方式将文本写入 Flink 套接字?