博客 flink内存管理, 增加Task内存大小,减少ManageMemory, network内存的方法

flink内存管理, 增加Task内存大小,减少ManageMemory, network内存的方法

   数栈君   发表于 2023-08-04 10:10  1298  0

问题描述

flink默认分配的内存,不合理,jvm 堆内存太小,其他内存太大。向yarn申请8G内存,最后分配到heap的大小才3.2G,不是让人抓狂吗?
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/9a5a4a7cb3c31dfe7f19784322ae038a..png
  
以上是,向yarn申请8G内存,实时分配的内存是上图所示。

内存分析:

1.内存分配中,TaskHeap占用89%,其实这时已经fullGC,
2.但ManagedMemory分配是2.78G,实际用1M都没有。
3. network内存分配了712M,实际才使用1.8M。

希望把 ManagerdMemory和Network的内存分配给TaskMemory,如何才能做到?

taskmanager.memory.managed.fraction
源码中找:

    public static final ConfigOption<Float> MANAGED_MEMORY_FRACTION =
        key("taskmanager.memory.managed.fraction")
                .floatType()
                .defaultValue(0.4f)
                .withDescription(
                    "Fraction of Total Flink Memory to be used as Managed Memory, if Managed Memory size is not"
                        + " explicitly specified.");

默认值是0.4.

    public static final ConfigOption<Float> NETWORK_MEMORY_FRACTION =
        key("taskmanager.memory.network.fraction")
            .floatType()
            .defaultValue(0.1f)
            .withDeprecatedKeys(
                NettyShuffleEnvironmentOptions.NETWORK_BUFFERS_MEMORY_FRACTION.key())
            .withDescription(
                "Fraction of Total Flink Memory to be used as Network Memory. Network Memory is off-heap"
                    + " memory reserved for ShuffleEnvironment (e.g., network buffers). Network Memory size is derived to"
                    + " make up the configured fraction of the Total Flink Memory. If the derived size is less/greater than"
                    + " the configured min/max size, the min/max size will be used. The exact size of Network Memory can be"
                    + " explicitly specified by setting the min/max size to the same value.");


默认值:
taskmanager.memory.network.fraction = 0.1

把这两个默认值,配置文件是: flink-conf.yaml 改为

taskmanager.memory.managed.fraction: 0.1
taskmanager.memory.network.fraction : 0.05
重启服务
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/79ab0b49cdfe757e1fb9c917e4d4377d..png
  
发现,修改的内存,ManagedMemory, NetworkMemory变小了,Task内存变大了。
看来task内存数,其他固定值分配完成后,剩下作为堆内存。

这两个值,看上去可以继续调小的。 taskmanager.memory.managed.fraction: 0.05都完全够用。
问题解决,开心。

把内存该为:

taskmanager.memory.managed.fraction: 0.05
taskmanager.memory.network.fraction: 0.05

效果如下图:
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/269ce8519f8c14b9ca36d970665ba5ff..png
  

默认值为什么是这么大?是什么应用场景呢?
查看官网,对内存的介绍

https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/memory/mem_tuning/
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/abcf9c2ca6aa7f3287d53fe0f67d57ec..png
  
Mmanaged memory是专门批处理优化使用,难怪在流处理上,看不到浪花。

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
上一篇:HDFS常用命令
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群