Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87256 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

20 | 案例篇:为什么系统的Swap变高了?(下)

关闭Swap
查看使用Swap最多的进程
查看swappiness配置
观察/proc/zoneinfo中指标变化
使用cachetop观察缓存使用情况
使用sar命令查看内存指标
模拟大文件读取
查看Swap使用情况
开启Swap
安装sysstat工具
机器配置
配置swappiness为0会发生Swap吗
降低Swap使用的方法
影响的应用程序
案例:磁盘I/O
/proc/sys/vm/swappiness
/proc/sys/vm/min_free_kbytes
匿名页回收
文件页回收
定期扫描
直接内存回收
思考题
Swap的影响
定位和分析Swap升高
Swap的配置
Swap的原理
Linux 内存回收
为什么系统的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
立即购买
登录 后留言

全部留言(48)

  • 最新
  • 精选
  • Free_fish
    用smem --sort swap命令可以直接将进程按照swap使用量排序显示

    作者回复: 👍 谢谢分享

    2019-01-04
    7
    98
  • Scott
    答案不是上一讲有提到吗,就算设置为0,如果空闲内存+文件页 < page_low,还是会发生swap,这个值是设置swap的积极程度,就算最不积极,被逼无奈还是得swap的。

    作者回复: 👍 是的

    2019-01-04
    4
    34
  • 尘封
    $ swapoff -a && swapon -a,线上使用这个命令释放swap有什么风险吗?

    作者回复: 有的,使用了swap说明内存可能有压力了,这么强制换入有可能导致内存问题

    2019-01-04
    19
  • Geek_b04b12
    对于sar以及其他的linux命令,如果出现列对的不整齐的时候,可以适当的参考文档,增加格式化输出,例如:sar的格式化输出:sudo sar -h --human -r -S 1 5 free 可以添加 -h :free -h 更容易让人理解

    作者回复: 谢谢分享👍

    2019-08-16
    2
    9
  • 仲鬼
    老师好,我研究man sar后还是没理解kbcommit,这个估计值具体指什么呢? 就算单纯以不导致OOM的最小内存理解,为什么会小于kbmemused(已用物理内存)呢?我认为应该是kbcommit >= kbmemused。

    作者回复: kbcommit就是进程申请的内存之和,kbmemused还包括了buffer和cache

    2019-01-09
    8
  • Days
    老师,请问如果关闭swap分区,swapping配置是不是无效的?

    作者回复: 是的

    2019-01-04
    2
  • 幸运的人
    老师,问一个问题 现在的公有云主机或者是私有云的虚拟机,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-15
    2
  • berryfl
    /proc/*/status会匹配到self之类的特殊目录,把匹配的部分写复杂点可以限制到仅数字,例如+([0-9])

    作者回复: 嗯,是的

    2019-01-10
  • 白华
    我写的dd参数就是大文件系统的数据,一共就20g存储的虚拟机,传的是/dev/root文件系统 有10g 需要写好久,实验现象和您描述的差不多,但是swap就是没变化

    作者回复: swap开了吗?swapiness配置的什么

    2019-01-07
    2
收起评论
显示
设置
留言
48
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部