内存性能篇-swap的概念_swap和内存

2023-03-31 16:28:26

 

1.swap内存优缺点

背景Swap 把不常访问的内存先写到磁盘中, 然后释放这些内存,给其他更需要的进 程使用再次访问这些内存时,重新从 磁盘读入内存 有新的大块内存分配请求,但是剩余内存不足 这个时候系统就需要回收一部分内存(比如前 面提到的缓存),进而尽可能地满足新内存请求。

2.swap内存是什么意思

这个过程通常被称为直接内存回收 除了直接内存回收,还有一个专门的内核线程 用来定期回收内存,也就是 kswapd0kswapd0为了衡量内存的使用情况,kswapd0 定义了三个内存阈值 (watermark,也称为水位),分别是页最小阈值(pages_min) 、页低阈值(pages_low)和页高阈值(pages_high)。

3.swap内存和zram

剩余内存,则使用 pages_free 表示

4.swap是内存的两倍

kswapd0 定期扫描内存的使用情况,并根据剩余内存落在这三个阈值 的空间位置,进行内存的回收操作 剩余内存小于页最小阈值,说明进程可用内存都耗尽了,只有内核才可 以分配内存 剩余内存落在页最小阈值和页低阈值中间,说明内存压力比较 大,剩余内存不多了。

5.swap内存使用率

这时 kswapd0 会执行内存回收,直到剩 余内存大于高阈值为止 剩余内存落在页低阈值和页高阈值中间,说明内存有一定压力,但还可以满 足新内存请求 剩余内存大于页高阈值,说明剩余内存比较多,没有内存压力 这个页低阈值,其实可以通过内核选项 /proc/sys/vm/min_free_kbytes 来间 接设置。

6.swap使用率高内存使用率不高

min_free_kbytes 设置了页最小阈值,而其他两个阈值,都是根据页 最小阈值计算生成的,计算方法如下: pages_low = pages_min*5/4 pages_high = pages_min*3/2。

7.swap内存不足解决方案

为什么剩余内存很多但是swap却在升高处理器的 NUMA (Non-Uniform Memory Access)架构导致的 在 NUMA 架构下,多个处理器被划分到不同 Node 上,且每个 Node 都拥有自己的本地内存空间。

8.swap内存释放

而同一个 Node 内部的 内存空间,实际上又可以进一步分为不同的内存域(Zone), 比如直接内存访问区(DMA)、普通内存区(NORMAL)、伪内 存区(MOVABLE)等,如下图所示

9.swap运存

然 NUMA 架构下的每个 Node 都有自己的本地内存空间,那么,在分析 内存的使用时,我们也应该针对每个 Node 单独分析你可以通过 numactl 命令,来查看处理器在 Node 的分布情况,以及每个 Node 的 内存使用情况。

10.swap和memory

比如,下面就是一个 numactl 输出的示例 # 需要安装apt install numactl root@ubuntu:~# numactl --hardware available: 1 nodes (0) node 0 cpus: 0 1 2 3 node 0 size: 7953 MB node 0 free: 5699 MB node distances: node 0 0: 10 我的系统中只有一个 Node,也就是 Node 0 ,而且编号为 0 、 1、2、3 的四个 CPU, 都位于 Node 0 上。

另外,Node 0 的内存大小为 7953 MB,剩余内存为 4416 MB内存阈值查看root@ubuntu:~# cat /proc/zoneinfo Node 0, zone DMA per-node stats nr_inactive_anon 2668 nr_active_anon 232344 nr_inactive_file 99975 nr_active_file 97279 nr_unevictable 4 nr_slab_reclaimable 14518 nr_slab_unreclaimable 17376 nr_isolated_anon 0 nr_isolated_file 0 workingset_refault 0 workingset_activate 0 workingset_nodereclaim 0 nr_anon_pages 232008 nr_mapped 64949 nr_file_pages 200270 nr_dirty 52 nr_writeback 0 nr_writeback_temp 0 nr_shmem 3017 nr_shmem_hugepages 0 nr_shmem_pmdmapped 0 nr_anon_transparent_hugepages 0 nr_unstable 0 nr_vmscan_write 0 nr_vmscan_immediate_reclaim 0 nr_dirtied 35872 nr_written 29016 pages free 3968 min 33 low 41 high 49 spanned 4095 present 3997 managed 3976 protection: (0, 2911, 7878, 7878, 7878) nr_free_pages 3968 nr_zone_inactive_anon 0 nr_zone_active_anon 0 nr_zone_inactive_file 0 nr_zone_active_file 0 nr_zone_unevictable 0 nr_zone_write_pending 0 nr_mlock 0 上面参数单位是多杀? pages 处的 min、low、high,就是上面提到的三个内存阈值, 而 free 是剩余内存页数,它跟后面的 nr_free_pages 相同。

nr_zone_active_anon 和 nr_zone_inactive_anon,分别是活 跃和非活跃的匿名页数nr_zone_active_file 和 nr_zone_inactive_file, 分别是活跃和非活跃的文件页数。

从这个输出结果可以发现,剩 余内存远大于页高阈值,所以此时的 kswapd0 不会回收内存Node 扩充内存的方法某个 Node 内存不足时,系统可以从其他 Node 寻找空闲内存, 也可以从本地内存中回收内存。

具体选哪种模式,你可以通过 /proc/sys/vm/zone_reclaim_mode 来调整 它支持以下几个选项:默认的 0 ,也就是刚刚提到的模式, 表示既可以从其他 Node 寻找空闲内存,也可以从本地回收内存。

1、2、4 都表示只回收本地内存,2 表示可以回写脏数据回收 内存,4 表示可以用 Swap 方式回收内存 查看命令: root@ubuntu:~# cat /proc/sys/vm/zone_reclaim_mode 0 。

swappiness 权重配置内存回收的机制了这些回收的内存既包括了文件页, 又包括了匿名页 对文件页的回收,当然就是直接回 收缓存,或者把脏页写回磁盘后再回收 而对匿名页的回收,其实就是通过 Swap 机制, 把它们写入磁盘后再释放内存。

既然有两种不同的内存回收机制, 那么在实际回收内存时,到底该先回收哪一种呢? 其实,Linux 提供了一个 /proc/sys/vm/swappiness 选 项,用来调整使用 Swap 的积极程度。

swappiness 的范 围是 0-100,数值越大,越积极使用 Swap,也就是更倾 向于回收匿名页;数值越小,越消极使用 Swap,也就是 更倾向于回收文件页虽然 swappiness 的范围是 0-100, 不过要注意,这并不是内存的百分比,而是调整 Swap 积极 程度的权重,即使你把它设置成 0,当剩余内存 + 文件页小 于页高阈值时,还是会发生 Swap。

总结在内存资源紧张时,Linux 通过直接内存回收和定期扫描 的方式,来释放文件页和匿名页,以便把内存分配给更需 要的进程使用 文件页的回收比较容易理解,直接清空,或者把脏数据写 回磁盘后再释放 而对匿名页的回收,需要通过 Swap 换出到磁盘中,下次访 问时,再从磁盘换入到内存中。


以上就是关于《内存性能篇-swap的概念_swap和内存》的全部内容,本文网址:https://www.7ca.cn/baike/10492.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜