当前位置:网站首页>内存中的swap机制
内存中的swap机制
2022-08-09 08:19:00 【为了维护世界和平_】
目录
一、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
边栏推荐
猜你喜欢
随机推荐
nyoj58 最少步数(DFS)
897. Increasing Order Search Tree
3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Exchange、HOOPS Communicator
三层交换机原理及配置
requests爬取百度翻译
204. Count Primes
scp上传文件到远程服务器
【愚公系列】2022年08月 Go教学课程 033-结构体方法重写、方法值、方法表达式
【MySQL】mysql:解决[Err] 1093 - You can‘t specify target table ‘表名‘ for update in FROM clause问题
NAT地址转换的原理与配置
IP地址及子网划分
Decimal工具类
3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Exchange、HOOPS Communicator
IO byte stream reads text Chinese garbled
jdbctemplate connects to sql server, the data found in the code is inconsistent with the database, how to solve it?
Shell编程之正则表达式
Operations in the database (syntax)
Solidworks 2022 Inspection新增功能:光学字符识别、可自定义的检查报告
网络层协议介绍
scp upload file to remote server