当前位置: 首页 > news >正文

Linux中 Swap 有哪些作用

核心概念:什么是 Swap?

Swap(交换空间)是磁盘上的一块特定区域(可以是一个独立分区,也可以是一个文件),被操作系统用来 扩展有效内存容量。当物理内存(RAM)不足时,可以将内存中不活跃的数据暂时移动到 Swap 中,从而为更紧急的任务释放出物理内存。


Swap 的五大核心作用

1. 内存溢出保护(核心作用)

这是 Swap 最广为人知的作用。当系统运行大量进程或处理非常庞大的数据集,导致物理内存被完全耗尽时,内核的 内存管理子系统 会启动“交换”机制。

  • 工作原理:内核会识别出物理内存中那些最近最少使用(LRU算法)且处于非活跃状态的“内存页”,将它们移动到 Swap 空间。这样,物理内存就被释放出来,用于处理当前急需内存的操作(如启动新程序、处理大文件等)。
  • 好处:避免了系统在内存耗尽时直接触发 OOM Killer。OOM Killer 会强制终止某个进程来释放内存,但这个选择可能是致命的(比如杀死了数据库进程导致服务中断)。有 Swap 的存在,系统有了一个缓冲地带,虽然变慢了,但保证了服务的 可用性数据完整性
2. 溢出检测与 OOM Killer 触发

这听起来和第一点矛盾,但实际上是一种协同机制。现代内核(如 Linux)非常智能,它 并不希望频繁使用 Swap,因为磁盘I/O速度远慢于内存。

  • 工作原理:系统会同时使用物理内存和 Swap。当内存压力增大时,内核开始使用 Swap。如果 Swap 的使用率也在持续快速增长,这表明内存短缺非常严重,系统已经是在“挣扎”而不仅仅是“缓冲”了。在这种情况下,内核会判断出即使频繁交换也无法满足需求,反而会因为大量I/O操作导致系统几乎卡死(称为“颠簸”)。此时,触发 OOM Killer 就成了一个更优的选择:牺牲一个进程,换取整个系统的响应能力。
  • 结论:Swap 的存在为内核提供了宝贵的决策数据,使其能更智能地判断何时应该触发 OOM Killer,而不是在物理内存刚耗尽时就鲁莽地“杀进程”。
3. 休眠到磁盘(Hibernation)

这是 Swap 的一个 必需性 功能。当您让电脑进入“休眠”状态时,系统的做法是:

  • 将当前物理内存中的所有内容(包括所有打开的程序和文档状态)完整地写入到 Swap 空间
  • 然后切断电源。
  • 下次启动时,引导程序会检查 Swap 区域,如果发现之前休眠保存的数据,就将其直接读回内存,从而让系统恢复到休眠前的精确状态。
  • 重要提示要实现休眠功能,您的 Swap 空间大小必须大于或等于您的物理内存容量。
4. 存放不活跃的内存页

即使在内存没有耗尽的情况下,内核也会策略性地使用 Swap 来优化内存使用效率。

  • 工作原理:当一个应用程序(比如一个大型IDE)启动后,您最小化了它,很长一段时间不再使用。它所占用的内存就变成了“不活跃”的。内核可能会悄悄地将这部分内存数据交换到 Swap 空间,从而为 磁盘缓存 腾出更多物理内存。
  • 好处:磁盘缓存(用于缓存频繁读写的文件数据)对系统性能提升巨大。用闲置的应用内存换来更大的磁盘缓存,通常会显著提升系统的整体响应速度和吞吐量。当您再次切换回那个应用时,系统会再把它从 Swap 换回内存,您只会感受到一次短暂的延迟,但系统在之前的很长时间里都运行得更快。
5. 提高内存利用率

在系统刚启动后,可能有很多内存处于空闲状态。内核的策略是“不用白不用”,它会用空闲内存来做磁盘缓存,从而提升性能。但内核也需要为未来可能的内存需求做准备。

  • 工作原理:内核会提前将一些非常不常用的后台守护进程的内存页交换到 Swap 中。这样做的目的不是因为它需要这些内存,而是为了 提前做好准备。它清空了一部分物理内存,使其保持“可用”状态,一旦有新的应用程序需要大量内存,就可以立即分配,而无需等待现场进行交换操作。这是一种用空间(一点Swap空间)换时间(分配内存的速度)的策略。

总结与类比

您可以把物理内存(RAM)想象成 办公桌的桌面,而 Swap 是您身后的 文件柜

  1. 桌面(RAM):空间有限,但访问速度极快。您会把当前正在处理的文件和最常用的工具放在桌面上。
  2. 文件柜(Swap):空间较大,但访问需要起身走过去,速度慢。您会把暂时不用的归档文件、参考书等放入文件柜。

作用对应:

  • 内存溢出保护:当桌面堆满了,您会把一些暂时不看的文件先塞进文件柜,让桌面有空间处理新文件。
  • 避免数据丢失:即使桌面满了,您也有地方存放文件,而不是直接把桌上的文件扔进垃圾桶(OOM Killer)。
  • 休眠:下班时,把桌面上所有东西原封不动地收进文件柜,第二天再拿出来,桌面恢复原样。
  • 优化效率:虽然某个项目档案偶尔会用到,但它大部分时间躺在文件柜里,让桌面空间可以留给更紧急的日常任务,整体工作效率更高。

现代实践建议

  • 需要 Swap 吗? 是的,几乎总是需要。即使物理内存很大(如 32GB),配置一个较小的 Swap(如 4GB)也是有益的,主要用于作用 2、4、5,以及防止极端情况下的内存溢出。
  • Swap 应该多大?
    • 传统规则:Swap = 2 × RAM。这在过去(RAM很小的时候)是合理的,但现在已过时。
    • 现代通用建议
      • 桌面系统:如果 RAM ≥ 4GB,Swap 配置 2GB - 4GB 通常足够。如果要休眠,则 Swap ≥ RAM
      • 服务器:根据工作负载决定。
        • 轻度使用:2GB - 4GB。
        • 内存密集型(如数据库、虚拟化):与 RAM 大小相当或更多,具体需测试。
        • 极高内存服务器(如 128GB+):可以配置较小的 Swap(如 4GB-8GB),主要起安全网的作用。
  • Swappiness:Linux 提供了一个可调参数 /proc/sys/vm/swappiness,值从 0 到 100。它控制内核使用 Swap 的积极程度
    • 默认值通常为 60
    • 值越高,内核越积极地使用 Swap。
    • 值越低(如 10-20),内核会尽量避免使用 Swap,除非万不得已。这对于数据库服务器等希望尽可能避免磁盘I/O的场景很有用。
    • 设置为 0并不代表禁用 Swap!它只意味着“除非为了避免内存溢出,否则不要交换”。在极端内存压力下,交换仍然会发生。

在这里插入图片描述

总而言之,Swap 是 Linux 内存管理系统中的一个智能且重要的安全缓冲和性能优化机制,而不仅仅是简单的内存替代品。


文章转载自:

http://baDqfMEu.wphzr.cn
http://EjGBvHg8.wphzr.cn
http://6njcqoMZ.wphzr.cn
http://t5wp1vYT.wphzr.cn
http://WKB4Gfsa.wphzr.cn
http://SAPWmPyL.wphzr.cn
http://xMfpv9DO.wphzr.cn
http://6CAB0GwG.wphzr.cn
http://TTqTIdpT.wphzr.cn
http://cSoI2W8r.wphzr.cn
http://Gw0TMeGc.wphzr.cn
http://SUXndGm6.wphzr.cn
http://tEJLxOJ8.wphzr.cn
http://Qln9znlA.wphzr.cn
http://rUF2V64D.wphzr.cn
http://P7ciGA5F.wphzr.cn
http://3Gd7D1jU.wphzr.cn
http://Ov7n4thr.wphzr.cn
http://BnZO7rJX.wphzr.cn
http://fQof8t4J.wphzr.cn
http://wkYi4Zvh.wphzr.cn
http://GProWSQR.wphzr.cn
http://uMulGUPF.wphzr.cn
http://Pp6MptTd.wphzr.cn
http://pNBpQ5xv.wphzr.cn
http://6H7cJrVA.wphzr.cn
http://sYrQHnQT.wphzr.cn
http://UQsmm5W7.wphzr.cn
http://ROgAKgcT.wphzr.cn
http://KzoO2sTw.wphzr.cn
http://www.dtcms.com/a/374889.html

相关文章:

  • Transformer架构:深度学习中的革命性模型
  • 解决window下共享资源报“不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接“问题
  • 自然语言处理 (NLP) 基础:词向量、模型与应用
  • C++设计模式之单例模式
  • C# ---ToLookUp
  • CSS in JS 的演进:Styled Components, Emotion 等的对比与选择
  • mybatis-plus多租户兼容多字段租户标识
  • Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
  • 华为云盘同步、备份和自动上传功能三者如何区分
  • 设计模式第一章(建造者模式)
  • Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记02
  • 【Vue】Vue2 与 Vue3 内置组件对比
  • XSS 跨站脚本攻击剖析与防御 - 第一章:XSS 初探
  • vue 去掉el-dropdown 悬浮时出现的边框
  • 常见的排序算法总结
  • [优化算法]神经网络结构搜索(一)
  • php 使用html 生成pdf word wkhtmltopdf 系列2
  • 大数据毕业设计选题推荐-基于大数据的海洋塑料污染数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 【计算机网络 | 第11篇】宽带接入技术及其发展历程
  • 探索Java并发编程--从基础到高级实践技巧
  • Made in Green环保健康产品认证怎么做?
  • yum list 和 repoquery的区别
  • 解决HTML/JS开发中的常见问题与实用资源
  • Angular 面试题及详细答案
  • AI与AR融合:重塑石化与能源巡检的未来
  • 增强现实光学系统_FDTD_zemax_speos_学习(1)
  • 开学季干货——知识梳理与经验分享
  • Alex Codes团队并入OpenAI Codex:苹果生态或迎来AI编程新篇章
  • The learning process of Decision Tree Model|决策树模型学习过程
  • 六、与学习相关的技巧(下)