5 一文看完flink的内存管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5 一文看完flink的内存管理相关的知识,希望对你有一定的参考价值。

参考技术A 1)java对象的存储密度比较低,对象主要包含 对象头,对象数据,对齐填充。 其中对齐填充是没用的,纯粹是为了让对象的大小到达8的倍数

2)Full GC非常影响性能,对大数据量的计算来说,fullGC可能会持续很久(秒级甚至分钟级)

3)OOM导致JVM崩溃,因为是大数据计算,很有可能会分配出大的对象。

4)缓存未命中,CPU在进行计算时,会先从CPU的缓存中抓取数据,但是jvm堆上的内存不是连续的,会导致CPU缓存不命中,CPU空转,影响效率。

5)传输过程,要序列化和反序列化

Flink将对象存储在堆外内存中,或者存在 memorySegment上

memorySegment: 

1 翻译为内存段,存储序列化后的对象

2 它是一段固定长度的内存(大小为32KB)

3 是FLink中最小的内存分配单元

4 读写非常高效,很多算子可以直接操作其二进制数据,不需要反序列化

5 Java本身自带的序列化和反序列化的功能,但是辅助信息占用空间比较大,在序列化对象时记录了过多的类信息。

Flink实现了自己的序列化框架,使用TypeInformation表示每种数据类型,所以可以只保存一份对象Schema信息,节省存储空间。又因为对象类型固定,所以可以通过偏移量存取。

jobmanager.heap.size:1024m

jobmanager.memory.process.size:1600m

主要包含 堆内存和非堆内存,相对比较简单一些。

关于rocksDb内存管理:

由于rocksdb分配的是堆外内存,内存量理论上不受jvm控制。于是产生问题,如果进程的内存使用超过容器限定的量,就会被资源管理器杀死。

以上是关于5 一文看完flink的内存管理的主要内容,如果未能解决你的问题,请参考以下文章

一文掌握 Linux 内存管理

Flink内存管理

Flink内存管理源码解读之内存管理器

Flink核心篇,四大基石容错机制广播反压序列化内存管理资源管理...

Flink 内核原理与实现-内存管理

Flink内存管理源码解读之基础数据结构