20 | 案例篇:为什么系统的Swap变高了?(下)
倪朋飞
该思维导图由 AI 生成,仅供参考
你好,我是倪朋飞。
上一节我们详细学习了 Linux 内存回收,特别是 Swap 的原理,先简单回顾一下。
在内存资源紧张时,Linux 通过直接内存回收和定期扫描的方式,来释放文件页和匿名页,以便把内存分配给更需要的进程使用。
文件页的回收比较容易理解,直接清空缓存,或者把脏数据写回磁盘后,再释放缓存就可以了。
而对不常访问的匿名页,则需要通过 Swap 换出到磁盘中,这样在下次访问的时候,再次从磁盘换入到内存中就可以了。
开启 Swap 后,你可以设置 /proc/sys/vm/min_free_kbytes ,来调整系统定期回收内存的阈值,也可以设置 /proc/sys/vm/swappiness ,来调整文件页和匿名页的回收倾向。
那么,当 Swap 使用升高时,要如何定位和分析呢?下面,我们就来看一个磁盘 I/O 的案例,实战分析和演练。
案例
下面案例基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。
机器配置:2 CPU,8GB 内存
你需要预先安装 sysstat 等工具,如 apt install sysstat
首先,我们打开两个终端,分别 SSH 登录到两台机器上,并安装上面提到的这些工具。
同以前的案例一样,接下来的所有命令都默认以 root 用户运行,如果你是用普通用户身份登陆系统,请运行 sudo su root 命令切换到 root 用户。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Linux系统中Swap使用升高的原因及分析方法。通过详细演示如何配置和开启Swap,并利用sar和cachetop命令分析内存和Swap的使用情况,读者可以快速了解Linux系统中Swap使用升高的情况及分析方法。文章重点讲解了Swap使用升高的情况,以及如何通过观察内存指标和进程缓存情况来定位问题。通过实际案例的分析,读者可以了解到Swap使用升高的原因,以及如何通过系统工具进行分析和定位问题。此外,文章还提供了一些常见的降低Swap使用的方法,以及对swappiness配置的思考。整体内容深入浅出,适合读者快速了解Linux系统中Swap使用升高的情况及分析方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》,新⼈⾸单¥68
《Linux 性能优化实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(48)
- 最新
- 精选
- Free_fish用smem --sort swap命令可以直接将进程按照swap使用量排序显示
作者回复: 👍 谢谢分享
2019-01-04798 - Scott答案不是上一讲有提到吗,就算设置为0,如果空闲内存+文件页 < page_low,还是会发生swap,这个值是设置swap的积极程度,就算最不积极,被逼无奈还是得swap的。
作者回复: 👍 是的
2019-01-04434 - 尘封$ swapoff -a && swapon -a,线上使用这个命令释放swap有什么风险吗?
作者回复: 有的,使用了swap说明内存可能有压力了,这么强制换入有可能导致内存问题
2019-01-0419 - Geek_b04b12对于sar以及其他的linux命令,如果出现列对的不整齐的时候,可以适当的参考文档,增加格式化输出,例如:sar的格式化输出:sudo sar -h --human -r -S 1 5 free 可以添加 -h :free -h 更容易让人理解
作者回复: 谢谢分享👍
2019-08-1629 - 仲鬼老师好,我研究man sar后还是没理解kbcommit,这个估计值具体指什么呢? 就算单纯以不导致OOM的最小内存理解,为什么会小于kbmemused(已用物理内存)呢?我认为应该是kbcommit >= kbmemused。
作者回复: kbcommit就是进程申请的内存之和,kbmemused还包括了buffer和cache
2019-01-098 - Days老师,请问如果关闭swap分区,swapping配置是不是无效的?
作者回复: 是的
2019-01-042 - 幸运的人老师,问一个问题 现在的公有云主机或者是私有云的虚拟机,swap默认是0,这种情况下是否还会出现swap in和swap out呢?我在留言中也看到其他同学问过相似的问题,但没有看到答案,请帮忙解释一下?谢谢。
作者回复: 嗯,云环境一般都是关闭swap,避免恍如换出带来的性能问题
2019-05-30 - zshanjun大文件读取瞬间完成,没有观察到内存的变化: root@linux-1:~/go/bin# dd if=/dev/sda1 of=/dev/null bs=16G count=2048 0+1 records in 0+1 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00693471 s, 151 MB/s
作者回复: 仔细看看,1048576 bytes (1.0 MB, 1.0 MiB) copied
2019-01-152 - berryfl/proc/*/status会匹配到self之类的特殊目录,把匹配的部分写复杂点可以限制到仅数字,例如+([0-9])
作者回复: 嗯,是的
2019-01-10 - 白华我写的dd参数就是大文件系统的数据,一共就20g存储的虚拟机,传的是/dev/root文件系统 有10g 需要写好久,实验现象和您描述的差不多,但是swap就是没变化
作者回复: swap开了吗?swapiness配置的什么
2019-01-072
收起评论