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

19 | 案例篇:为什么系统的Swap变高了(上)

Swap机制
文件页的回收
缓存和缓冲区的可回收内存
kswapd0的内存回收
直接内存回收
内存回收
OOM(Out Of Memory)的处理
解决思路总结
Swap导致的性能问题分析
Swap的使用优先级
调整Swap的积极程度
内存回收策略
Node的内存使用情况
NUMA架构下的内存分析
内存回收的触发条件
Swap的作用
换出和换入
内存资源紧张时系统的应对
内存泄漏的分析
思考
swappiness
NUMA与Swap
Swap原理
为什么系统的Swap变高了

该思维导图由 AI 生成,仅供参考

你好,我是倪朋飞。
上一节,我通过一个斐波那契数列的案例,带你学习了内存泄漏的分析。如果在程序中直接或间接地分配了动态内存,你一定要记得释放掉它们,否则就会导致内存泄漏,严重时甚至会耗尽系统内存。
不过,反过来讲,当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢?
在内存基础篇我们已经学过,这其实会导致两种可能结果,内存回收和 OOM 杀死进程。
我们先来看后一个可能结果,内存资源紧张导致的 OOM(Out Of Memory),相对容易理解,指的是系统杀死占用大量内存的进程,释放这些内存,再分配给其他更需要的进程。
这一点我们前面详细讲过,这里就不再重复了。
接下来再看第一个可能的结果,内存回收,也就是系统释放掉可以回收的内存,比如我前面讲过的缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。
大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读取就可以了。而那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),就得先写入磁盘,然后才能进行内存释放。
这些脏页,一般可以通过两种方式写入磁盘。
可以在应用程序中,通过系统调用 fsync ,把脏页同步到磁盘中;
也可以交给系统,由内核线程 pdflush 负责这些脏页的刷新。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了系统Swap机制的工作原理及其在NUMA架构下的应用。Swap机制通过将不常访问的内存数据暂时存储到磁盘中,释放内存资源,以应对系统内存资源紧张的情况。文章详细解释了Swap的工作原理,包括换出和换入两个过程,以及内存回收的相关概念和内核线程kswapd0的作用。此外,还介绍了Swap的应用场景,如在内存不足时运行大内存的应用程序、避免OOM杀死进程、以及支持笔记本电脑的休眠和快速开机功能。文章指出,即使现在内存便宜且服务器配置较大内存,Swap仍然具有重要作用。最后,文章提到了内存压力的衡量方法,以及内核选项对内存阈值的设置。通过本文的内容,读者可以深入了解Swap机制的工作原理和应用场景,以及内存回收的相关概念和方法。文章内容涵盖了Swap机制的原理、应用及相关技术细节,对于需要深入了解系统内存管理的读者具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(78)

  • 最新
  • 精选
  • Ray
    关于上面有同学表示 hadoop 集群建议关 swap 提升性能。事实上不仅 hadoop,包括 ES 在内绝大部分 Java 的应用都建议关 swap,这个和 JVM 的 gc 有关,它在 gc 的时候会遍历所有用到的堆的内存,如果这部分内存是被 swap 出去了,遍历的时候就会有磁盘IO 可以参考这两篇文章: https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html https://dzone.com/articles/just-say-no-swapping

    作者回复: 嗯嗯,大部分应用都不需要swap

    2019-01-22
    6
    86
  • 爱学习的小学生
    请问老师、为什么kubernetes要关闭swap呢?

    作者回复: 一个是性能问题,开启swap会严重影响性能(包括内存和I/O);另一个是管理问题,开启swap后通过cgroups设置的内存上限就会失效。

    2019-02-21
    2
    66
  • 某、人
    swap应该是针对以前内存小的一种优化吧,不过现在内存没那么昂贵之后,所以就没那么大的必要开启了 numa感觉是对系统资源做的隔离分区,不过目前虚拟化和docker这么流行。而且node与node之间访问更耗时,针对大程序不一定启到了优化作用,针对小程序,也没有太大必要。所以numa也没必要开启。 不知道我的理解对否,老师

    作者回复: 对的

    2019-01-02
    32
  • bob
    swappiness=0 Kernel version 3.5 and newer: disables swapiness. Kernel version older than 3.5: avoids swapping processes out of physical memory for as long as possible. 如果linux内核是3.5及以后的,最好是设置swappiness=10,不要设置swappiness=0 以前整理的说明,供大家参考。

    作者回复: 谢谢分享

    2019-01-03
    2
    18
  • 日行一善520
    看到评论有人问 hadoop集群服务器一般是建议关闭swap交换空间,这样可提高性能。在什么情况下开swap、什么情况下关swap? 为了性能关闭swap,这样就不会交换也不会慢了。内核里有个vm.xx的值可以调节swap和内存的比例,在使用内存90%时才交换到swap,可以设置这个来保持性能。在内存比较少的时候,还可以交换,就好了。

    作者回复: 谢谢分享

    2019-01-16
    12
  • 刘政伟
    老师,在工作中经常会遇到这种情况,系统中的剩余内存较小、缓存内存较大的,也就是整体可用内存较高的情况下,就开始使用swap了,而查看swappiness的配置为10,理论上不应该使用swap的;具体看下面的free命令,麻烦老师看下是什么原因? [root@shvsolman ~]# free -m total used free shared buffers cached Mem: 32107 31356 750 0 15 12514 -/+ buffers/cache: 18825 13281 Swap: 3071 1581 1490 [root@shvsolman ~]# sysctl -a | grep swappiness vm.swappiness = 10

    作者回复: 这是容易误解的地方,其实,即使把swappiness设置成0也不会禁止swap。想要禁止,就不要开启swap。

    2019-03-11
    11
  • Days
    我们公司处理嵌入式系统都是关闭swap分区,具体不知道什么原因?

    作者回复: 一般是为了减少写的次数,延长Flash存储的寿命

    2019-01-02
    11
  • 我来也
    [D19打卡] 很遗憾,还未遇到过swap导致的性能问题. 刚买电脑时,512M内存要四百多,可是当时也不玩linux. 等工作了,用linux了,内存相对来说已经比较便宜了. 现在就更不用说了,基本小钱能解决的问题都不是问题了. -------------------- 以前的程序喜欢在启动时预分配很多内存,可是现在的几乎都是动态分配了. 以前一个程序动辄实际使用内存2-3G. 现在即使重构后,只需要100M内存,老板都不愿意换了.[稳定第一]

    作者回复: 👍

    2019-01-02
    7
  • 路过
    老师,前面你写只有当剩余内存落在页最小阈值和页低阈值中间,才开始回收内存。后面讲即使把 swappiness 设置为0,当剩余内存 + 文件页小于页高阈值时,还是会发生 Swap。我理解,这里是不是应该是:当剩余内存 + 文件页小于页低阈值时,还是会发生 Swap。谢谢!

    作者回复: 阈值的比较只代表回收内存的时机,具体回收哪些内存才是swappiness的目的,但是swappiness只是个倾向,而非绝对值

    2019-01-03
    3
    6
  • DJH
    倪老师,请教一下,Linux下怎么关闭SWAP功能?直接不分配SWAP卷(或者分区、文件),还是通过某个关闭SWAP功能的系统选项?

    作者回复: swapoff命令可以动态关闭,持久化还要从fstab里面删除

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