美文网首页
spark2.x--7. 内存管理之StaticMemoryMa

spark2.x--7. 内存管理之StaticMemoryMa

作者: shuitai | 来源:发表于2018-02-22 10:29 被阅读0次

1. MemoryManager

Spark的内存主要分为管理储存(Storage)和执行(Execution),ExecutionMemory是指 Shuffles,joins,sorts和 aggregation 的操作;而StorageMemory 是缓存和广播数据相关的,每一个 JVM 会产生一个 MemoryManager 来负责管理内存。

MemoryManager 主要有几个功能:

•记录用了多少 StorageMemory 和ExecutionMemory

•申请 Storage、Execution 和Unroll Memory

•释放 Storage 和ExecutionMemory

其中MemoryManger有两个实现类,StaticMemoryManager和UnifiedMemoryManager。

图 1  MemoryManger类图 

2. StaticMemoryManager

今天我们先看看StaticMemoryManager,以下是ExecutionMemory,StorageMemory,UrollMemory在StaticMemoryManager的分配。

图 2 StaticMemoryManager内存管理图示——堆内

对应的代码如下:

其中 systemMaxMemory 取决于当前 JVM 堆内内存的大小,最后可用的执行内存或者存储内存要在此基础上与各自的memoryFraction 参数和 safetyFraction 参数相乘得出。上述计算公式中的两个 safetyFraction 参数,其意义在于在逻辑上预留出1-safetyFraction 这么一块保险区域,降低因实际内存超出当前预设范围而导致 OOM 的风险(上文提到,对于非序列化对象的内存采样估算会产生误差)。值得注意的是,这个预留的保险区域仅仅是一种逻辑上的规划,在具体使用时 Spark 并没有区别对待,和"其它内存"一样交给了 JVM 去管理。

堆外的空间分配较为简单,只有存储内存和执行内存,如图 3 所示。可用的执行内存和存储内存占用的空间大小直接由参数 spark.memory.storageFraction 决定,由于堆外内存占用的空间可以被精确计算,所以无需再设定保险区域。

图 3  StaticMemoryManager内存管理图示——堆外

对应的代码在MemoryManager.scala:

StaticMemoryManager申请StorageMemory见方法acquireStorageMemory

StaticMemoryManager申请ExecutionMemory见方法acquireExecutionMemory

StaticMemoryManager申请UnrollMemory见方法acquireUnrollMemory

MemoryManager 的具体实现上,Spark 1.6 之后默认为统一管理(Unified Memory Manager)方式,1.6 之前采用的静态管理(Static Memory Manager)方式仍被保留,可通过配置 spark.memory.useLegacyMode 参数启用。

相关文章

  • spark2.x--7. 内存管理之StaticMemoryMa

    1. MemoryManager Spark的内存主要分为管理储存(Storage)和执行(Execution),...

  • spark1.6内存管理

    Spark从1.6.0版本开始,内存管理模块就发生了改变,旧版本的内存管理模块是实现了StaticMemoryMa...

  • iOS性能调优之--内存管理

    iOS性能调优之--内存管理 iOS性能调优之--内存管理

  • Q:Java有几种引用类型?

    Java有几种引用类型 引自 java 知识 之 内存管理 Java 中的内存管理包括内存分配和内存回收,这些都是...

  • RxSwift学习之十七 (内存管理,循环引用问题

    @[TOC](RxSwift学习之十七 (内存管理,循环引用问题)) 1. Rxswift内存管理简介 Rxswi...

  • iOS - 内存管理(三)之ARC

    前言 阅读本文前请先理解前面的两篇内容《iOS - 内存管理(一)之MRR》和 《iOS - 内存管理(二)之Co...

  • 内存管理之Mono内存

    这是我在《Unity游戏优化 (第2版)》看的,记录一下~ 内存效率是性能优化的一个重要元素 有啥问题呢?不必要的...

  • 内存管理

    OC中的内存管理是通过引用计数技术实现的,所谓内存管理就是在合适的时机创建和销毁一个对象。 OC对象内存管理之MR...

  • 虚拟内存

    内存管理之虚拟内存 内存管理是计算机操作系统中最复杂、重要的内容之一,虽然内存的容量在不断地增大,但是还是不足以将...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

网友评论

      本文标题:spark2.x--7. 内存管理之StaticMemoryMa

      本文链接:https://www.haomeiwen.com/subject/aopatftx.html