系统相关
首页 > 系统相关> > Linux文件页、脏页、匿名页

Linux文件页、脏页、匿名页

作者:互联网

文章目录

1.一、什么是文件页?什么是脏页?什么是匿名页?

二、linux swap原理

三、内存回收的时机

1、直接内存回收

有新的大块内存分配请求,但是剩余内存不足。这个时候系统就需要回收一部分内存(比如前面提到的缓存),进而尽可能地满足新内存请求。这个过程通常被称为直接内存回收

2、kswapd0内核线程

除了直接内存回收,还有一个专门的内核线程用来定期回收内存,也就是kswapd0。

为了衡量内存的使用情况,kswapd0 定义了三个内存阈值(watermark,也称为水位)

一旦剩余内存小于页低阈值,就会触发内存的回收。
这个页低阈值,其实可以通过内核选项 /proc/sys/vm/min_free_kbytes 来间接设置。min_free_kbytes 设置了页最小阈值,而其他两个阈值,都是根据页最小阈值计算生成的,计算方法如下

pages_low = pages_min*5/4
pages_high = pages_min*3/2

四、内存回收的方式

一旦发现内存紧张,系统会通过三种方式回收内存。这三种方式分别是 :

前两种方式,缓存回收和 Swap 回收,实际上都是基于 LRU 算法,也就是优先回收不常访问的内存。LRU 回收算法,实际上维护着 active 和 inactive 两个双向链表,其中:

# grep 表示只保留包含 active 的指标(忽略大小写)
# sort 表示按照字母顺序排序
$ cat /proc/meminfo | grep -i active | sort
Active(anon): 167976 kB
Active(file): 971488 kB
Active: 1139464 kB
Inactive(anon): 720 kB
Inactive(file): 2109536 kB
Inactive: 2110256 kB

第三种方式,OOM 机制按照 oom_score 给进程排序。oom_score 越大,进程就越容易被系统杀死

dmesg | grep -i "Out of memory"

OOM什么时候会发生?

四、NUMA 与 Swap关系

为什么剩余内存很多的情况下,也会发生 Swap 呢?这正是处理器的 NUMA (Non-UniformMemory Access)架构导致的。

在 NUMA 架构下,多个处理器被划分到不同 Node 上,且每个 Node 都拥有自己的本地内存空间。而同一个 Node 内部的内存空间,实际上又可以进一步分为不同的内存域(Zone),比如直接内存访问区(DMA)、普通内存区(NORMAL)、伪内存区(MOVABLE)等,
如下图所示
在这里插入图片描述


 tune]$ numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 24 25 26 27 28 29 30 31 32 33 34 35
node 0 size: 163710 MB
node 0 free: 654 MB
node 1 cpus: 12 13 14 15 16 17 18 19 20 21 22 23 36 37 38 39 40 41 42 43 44 45 46 47
node 1 size: 163840 MB
node 1 free: 11017 MB

这个界面显示,我的系统中有两个 Node
编号为 0 1 2 3 4 5 6 7 8 9 10 11 24 25 26 27 28 29 30 31 32 33 34 35的24个CPU, 都位于 Node 0 上。

编号为12 13 14 15 16 17 18 19 20 21 22 23 36 37 38 39 40 41 42 43 44 45 46 47 的24个CPU, 都位于 Node1 上。

另外,
Node 0 的内存大小为 163710 MB,剩余内存为 654MB
Node 1 的内存大小为 163840 MB,剩余内存为 11017MB

NUNA 和Swap之间的关系:


tune]$ cat /proc/zoneinfo|more
Node 0, zone      DMA
  pages free     3936
        min      0
        low      0
        high     0
        scanned  0
        spanned  4095

某个 Node 内存不足时,系统可以从其他 Node 寻找空闲内存,也可以从本地内存中回收内存。具体选哪种模式,你可以通过 /proc/sys/vm/zone_reclaim_mode来调整

五、swappiness

对文件页的回收,当然就是直接回收缓存,或者把脏页写回磁盘后再回收。
对匿名页的回收,其实就是通过 Swap 机制,把它们写入磁盘后再释放内存

————————————————
版权声明:本文为CSDN博主「MyySophia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyySophia/article/details/108025297

————————————————
版权声明:本文为CSDN博主「MyySophia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyySophia/article/details/108025297

————————————————
版权声明:本文为CSDN博主「MyySophia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyySophia/article/details/108025297

标签:Node,阈值,回收,匿名,内存,Linux,磁盘,脏页,Swap
来源: https://blog.csdn.net/u011436427/article/details/121023229