热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flink内存模型详解与案例

任务提交时的一些yarn设置(通用客户端模式)指定并行度            -p5\ 指定yar

任务提交时的一些yarn设置(通用客户端模式)

指定并行度                        -p 5 \ 

指定yarn队列                     -Dyarn.application.queue=xxx \

指定JM总进程的大小        -Djobmanager.memory.process.size=1024mb \

指定每个TM的总进程大小,一般是 2-8g,yarn默认最大给8g    -Dtaskmanager.memory.process.size=1024mb \   

指定每个TM的slot数         -Dtaskmanager.numberOfTaskSlots=2 \

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

flink 内存模型如下图:

 

 1.flink框架内存使用了堆上内存和堆外内存,不计入slot资源

2、task执行的内存使用了堆上内存和堆外内存

3、网络缓冲内存:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区

4、框架堆外内存、task堆外内存、网络缓冲内存,都在堆外的直接内存里。

5、管理内存:flink管理的堆外内存。用于管理排序、哈希表、缓存中间结果及RocksDB State Backend 的本地内存

6、jvm特有内存:jvm本身占用的内存,包括元空间和执行开销

7、flink使用内存=框架堆内和堆外内+Task堆内和堆外内存+网络缓冲内存+管理内存

8、进程内存=Flink内存+jvm特有内存

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

内存模型详解:

jvm特定内存:jvm本身使用的内存,包含jvm的metaspace和over-head

①JVM metaspace:jvm元空间

taskmanager.memory.jvm-metaspace.size 默认256mb

②JVM over-head执行开销:JVM执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。

taskmanager.memory.jvm-overhead.fraction, 默认0.1

taskmanager.memory.jvm-overhead.min,      默认192mb

taskmanager.memory.jvm-overhead.max,     默认1gb

总进程内存*fraction,如果小于配置的min或大于配置的max,则使用min/max

框架内存:flink框架,即TaskManager本身所占用的内存,不计入slot的资源中。

堆内:taskmanager.memory.framework.heap.size, 默认128mb

堆外:taskmanager.memory.framework.off-heap.size,默认128mb

Task内存:Task执行用户代码时所使用的内存

堆内:taskmanager.memory.task.heap.size,默认none,由flinl内存口扣除掉其他部分的内存得到、

堆外:taskmanager.memory.task.off-size,默认0,表示不使用堆外内存

网络内存:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区 

堆外:taskmanager.memory.network.fraction,默认0.1

   taskmanager.memory.network,min,默认64mb

   taskmanager.memory.network.max,默认1gb

flink内存*fraction,如果小于配置的min或大于配置的max,则使用min/max

管理内存:用于RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。

堆外:taskmanager.memory.managed.fraction,默认0.4

   taskmanager.memory.managed.size,默认none

如果size没指定,则等于flink内存*fraction

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 实际案例

基于yarn模式,一般参数指定的是总进程内存,taskmanager.memory.process.size,

如果该大小为4G,每一块内存得到大小如下:

①计算flink内存

jvm元空间256m

jvm执行开销:4g*0.1=409.6,在[192.1g]之间,最终结果409.6m

flink内存=4g-256m-409.6m=3430.4m

②网络内存=3430.4*0.1=343.04,在[64m,1g]之间,最终结果343.04m

③托管内存=3430.4m*0.4=1372.16m

④框架内存,堆内和堆外都是128m

⑤Task堆内内存=3430.4m-128m-128m-343.04m-1372.16m=1459.2m    堆内内存是总内存减去所有其他的内存。在总大小不变的情况小想调大堆内内存,就把其他内存调小。

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

提交程序,查看flink ui结果。和计算的几乎一致

 

 

 

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 JVM参数与内存

jvm Options:

-Xmx1664299798     

-Xms1664299798     jvm堆内内存大小(最大与最小)  约1587m=Task堆内+框架堆内

 

 -XX:MaxDirectMemorySize=493921243 jvm堆外内存大小    约471m=Task堆外+框架堆外+网络内存

 

-XX:MaxMetaspaceSize=268435456   jvm元空间大小,约256m 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

调优原则,根据程序运行时每块内存的使用情况来调整。

 



推荐阅读
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在Java面向对象编程中,内存管理是关键环节之一。Java虚拟机(JVM)的内存结构主要由栈(Stack)、堆(Heap)和方法区(Method Area)组成。其中,栈用于存储方法的执行上下文,每个方法调用时都会创建一个栈帧,用于保存局部变量表、操作数栈等信息。堆则是用于存储对象实例和数组,是垃圾回收的主要区域。方法区则用于存储类的元数据、常量池、静态变量等信息。通过合理管理和优化这些内存区域,可以显著提升程序的性能和稳定性。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • React项目基础教程第五课:深入解析组件间通信机制 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
author-avatar
会唱歌的高跟鞋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有