内存回收、脏页、swap 机制

1. 内存资源紧张的时候,可能会发生两种情况

  • 内存回收

  • OOM

2. 内存回收分析:

  • 可回收:缓存、缓冲区、文件映射⻚ ,他们通常叫做文件页

  • 有些文件页被修改了,但是还没有同步到磁盘,这些叫做脏页,需要先写入磁盘,然后才能回收。

  • 不可直接回收:应用程序动态分配的堆内存 (匿名页)。如果这些内存在分配后很少被访问 ,可以先暂时存放在磁盘上面,后面需要的时候再读取。(这就是 swap)

3. 脏页如何回收:

  • 应用程序:调用syscall fsync

  • 内核线程 pdflush

4. swap:

  • Swap说白了就是把一块磁盘空间或者一个本地文件(以下讲解以磁盘为例),当成内存来使用。 它包括换出和换 入两个过程。

  • 我们常⻅的笔记本电脑的休眠和快速开机的功能,也基于Swap 。休眠时,把系统的内存存入磁盘,这样等到再次 开机时,只要从磁盘中加载内存就可以。这样就省去了很多应用程序的初始化过程,加快了开机速度。

  • kswapd0:专⻔的内核线程用来定期回收内存 ,定期扫描

640?wx_fmt=jpeg

5. 为什么内存还有很多,还是会有 swap?

  • 处理器 NUMA 架构:多个处理器被划分到不同 Node 上,且每个 Node 都拥有 自己的本地内存空间。

640?wx_fmt=jpeg

  • numactl —hardware

640?wx_fmt=jpeg

  • cat /proc/zoneinfo

该图中,free 远高于 min,所以kswapd0不会回收内存

640?wx_fmt=jpeg

  • cat /proc/sys/vm/zone_reclaim_mode

默认的 0 ,也就是刚刚提到的模式,表示既可以从其他 Node 寻找空闲内存,也可以从本地回收内存。

1、2、4 都表示只回收本地内存,2 表示可以回写脏数据回收内存,4 表示可以用 Swap 方式回收内存。

  • swappiness

倾向于使用 swap 的程度。

/proc/sys/vm/swappiness

6. 内存回收机制

  • 回收文件页:直接回收,或者把脏页写入磁盘后再回收

  • 回收匿名页:swap 机制,写入磁盘再回收内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值