问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一次Flink生产环境内存调优实战

创作时间:
作者:
@小白创作中心

一次Flink生产环境内存调优实战

引用
CSDN
1.
https://blog.csdn.net/bigdatawcq/article/details/140047346

前言

在生产环境中上线一个Flink任务,原本稳定运行,突然出现OOM错误。初始资源配置如下:

-Djobmanager.memory.process.size=800mb
-Dtaskmanager.memory.process.size=2048mb

尽管为TaskManager分配了2GB内存,但仍然出现内存溢出。这可能是因为Flink有其特定的内存模型和默认分配策略,实际可用于数据处理的堆内存(task heap)并没有想象中那么多。

经过调整后,将TaskManager的内存配置改为:

-Dtaskmanager.memory.process.size=3072mb
-Dtaskmanager.memory.task.heap.size=1536mb
-Dtaskmanager.memory.managed.size=512mb

调整后的效果显示,虽然整体内存使用量减少到3GB,但实际用于数据处理的堆内存并未受到影响,反而优化了资源使用效率。

调节过程

查看Flink官方文档中的内存模型介绍,了解各个内存部分的分配和计算方式。Flink的内存模型图如下:

在调整过程中,考虑到该Flink作业对托管内存(managed memory)的需求不大,因此手动设置了较小的固定值。同时,将总内存设为3GB,其中一半(1.5GB)分配给任务堆内存,以确保资源得到充分使用。其他部分的内存则由Flink根据内存模型自动分配。

调整后的Flink内存模型显示,任务堆内存使用了我们指定的大小,而托管内存也通过手动设置避免了不必要的资源占用。整体内存使用量减少到3GB,相比直接分配4GB内存节省了1GB资源,且实际任务堆内存并未受到影响。

总结

这次调优是针对特定Flink作业的内存优化,由于该作业对托管内存需求不大,因此采取了这种配置方式。对于其他Flink作业,需要根据具体业务场景灵活调整内存配置。在设定过程中,一定要遵守Flink的内存计算规则和约束,这些信息在官网的介绍中有详细说明。

希望每位Flink作业运维人员都能在调优之路上越走越远,避免不必要的资源浪费。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号