目录
- 背景
- 第一部分 Flink内存管理详解
- 第二部分 Flink内存优化
- 第三部分 总结
- 参考文献及资料
背景
Flink计算框架和Spark相同,都是基于JVM虚拟机实现的。基于 JVM 的数据分析引擎都需要面对将大量数据存到内存中,这就不得不面对 JVM 存在的几个问题:
- Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。
- Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大内存空间的JVM来说,GC 会达到秒级甚至分钟级。
- OOM 问题影响稳定性。OutOfMemoryError是分布式计算框架经常会遇到的问题,当JVM中所有对象大小超过分配给JVM的内存大小时,就会发生OutOfMemoryError错误,导致JVM崩溃,分布式框架的健壮性和性能都会受到影响。
第一部分
参考文献及资料
1、《Deep Dive: Apache Spark Memory Management》介绍视频,链接:https://youtu.be/dPHrykZL8Cg
2、探索Spark Tungsten的秘密,链接:https://github.com/hustnn/TungstenSecret