内存中的swap机制
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存中的swap机制相关的知识,希望对你有一定的参考价值。
目录
一、swap原理
把一块磁盘空间或者一个本地文件当成内存来使用。有换入和换出两个动作
换出:把进程暂时不用的额内存存到磁盘中,并释放这些数据占用的内存
换入:进程再次访问这些内存的时候,从磁盘读取数据到内存。
二、swap内存回收的情况
1)请求大块内存时,剩余内存不足,系统会回收一部分内存,swap内存会被回收
2)内核线程kswapd0,会定期回收内存。什么情况下回收有三个内存阈值,pages_min,pages_low,pages_high。页低阈值通过内核选项/proc/sys/vm/min_free_kbytes来配置页最小阈值,其他两个参数通过最小阈值计算生成。
- 剩余内存<页最小阈值,说明进程可用内存都耗尽了,只有内核才可以分配内存。
- 页最小值 <剩余内存<页低阈值,内存压力大。kswapd0会执行内存回收,指导剩余的内存大于高阈值为止。
- 页低阈值<剩余内存<页高阈值,说明内存有一定压力,但可以满足内存的使用请求。
- 剩余内存>页高阈值, 说明内存非常充足。
#cat /proc/zoneinfo
Node 0, zone Normal
pages free 459160
min 10552
low 13190
high 15828
...
nr_free_pages 459160
nr_zone_inactive_anon 176665
nr_zone_active_anon 261
nr_zone_inactive_file 255910
nr_zone_active_file 195346
nr_zone_unevictable 0
nr_zone_write_pending 10
min,low,high是最小,低,高内存的阈值。
nr_zone_inactive_anon,nr_zone_active_anon 分别是活跃和非活跃的匿名页数
nr_zone_inactive_file,nr_zone_active_file 分别是活跃和非活跃的文件页数
三、NUMA架构下的Swap说明
swap内存升高,说明没有内存可用,有时会发现系统剩余内存还有很多,为什么还会发生Swap? NUMA下会发生,多处理器被划分为不同Node上。
当某个Node内不足时,系统可用从其他Node寻址内存空间,也可以从本地中回收内存。内存参数/proc/sys/vm/zone_reclaim_mode可以调整。
默认0,可以从其他Node寻找内存,也可以从本地回收内存
1,2,4 三个值都表示只回收本地内存,2,可以回写脏数据回收内存,4,可以用Swap方式回收内存。
四、回收策略
对文件页回收,直接回收内存,或者把脏页写会磁盘后再回收
对匿名页回收,Swap机制,把数据写入磁盘后再释放内存。
Swap内存回收的积极性调整 /proc/sys/vm/swappiness
swappiness的范围0-100,值越大越积极使用Swap,也就是回收匿名页,反之倾向于回收页文件。
当值为0时,当剩余内存+文件页小于页高阈值时,还是会发生Swap
五、实验
当Swap使用升高时,如何定位分析呢?
总体监控图如下,三个终端
使用的命令与参数
5.1、系统启用swap机制,如果free有swap则代表已经开启
# 创建Swap文件
# fallocate -l 2G /mnt/swapfile
# chmod 600 /mnt/swapfile
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
5.2、模拟数据读取
dd if=/dev/sda1 of=/dev/null bs=1G count=2048
5.3、使用sar -r -S 1 查看内存使用情况
kbmemfree不断减少,kbbuffer不断增大,并逐渐趋于稳定,说明剩余内存空间分配给了缓冲区。
剩余内存很小后,Swap使用逐渐增大
5.4、使用watch -d grep -A 15 'Normal' /proc/zoneinfo 观察内存三值的波动
pages free在不断变化,。当值小于pages_low时,又突然增大到高于pages_high的值
5.5,查看swappiness的值
#cat /proc/sys/vm/swappiness
60
监控输出解析
- 剩余内存和缓冲区的波动,由于内存回收和缓存再分配的循环操作;
- 当剩余内存小于页低阈值时,系统会回收一些缓存和匿名内存;
- 匿名缓冲区的回收导致Swap 的使用增大;
- 剩余内存又重新分配给缓存,导致剩余内存减少,缓冲区增大;
- swappiness值60,系统会根据实际情况,选择回收类型(不活跃的匿名页或不活跃的文件页);
六、总结
- 内存资源紧张时,linux会通过Swap,把不常用的匿名页换出到磁盘,访问时再从磁盘换入到内存;
- 系统定期回收的阈值通过/proc/sys/vm/min_free_kbytes 调整;
- 页回收的倾向通过 /proc/sys/vm/wappiness 调整;
- 监控策略sar,/proc/zoneinfo查看。
参考链接
https://course.0voice.com/v1/course/intro?courseId=2&agentId=0
以上是关于内存中的swap机制的主要内容,如果未能解决你的问题,请参考以下文章
Linux内存机制以及手动释放swap和buffer和cache