Ubuntu零基础入门到精通【9.5讲】:Swap 分区与 Swap 文件 - Ubuntu 内存扩展机制深度实战
2026/9/11 17:57:20 网站建设 项目流程

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。
本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

🎯适合人群:Linux 初学者、Ubuntu 新手、计算机专业学生、后端 / 运维 / 测试入门同学、想搭建 Linux 开发环境的开发者、准备学习服务器部署的同学,以及想从 Windows 过渡到 Ubuntu 工作流的用户。

从“会打开终端”到“能管理系统”,从“复制命令”到“理解 Linux 思维”,这一次,我们不零散学,而是一路滚雪球!

🎉限时福利:当前专栏活动中,一次订阅,终身阅读,后续更新章节全部免费解锁👉 立即查看👈️

演示环境说明:

  • 开发工具:Visual Studio Code / JetBrains 系列 IDE / Vim / Nano
  • Ubuntu版本:Ubuntu 22.04 LTS / Ubuntu 24.04 LTS,推荐 Ubuntu 24.04 LTS
  • Linux内核版本:Linux Kernel 6.x 或更高
  • 终端环境:Bash / Zsh
  • 包管理工具:APT / Snap / Flatpak
  • 远程连接工具:OpenSSH / Windows Terminal / MobaXterm / Termius
  • 虚拟化环境:VMware Workstation / VirtualBox / WSL2 / 云服务器
  • 容器环境:Docker / Docker Compose
  • 操作系统:Ubuntu Desktop / Ubuntu Server

全文目录:

    • 一、前言:内存满了,系统不该直接崩溃
    • 二、本文要解决什么问题
    • 三、Swap 的本质:Linux 内存管理基础
      • 3.1 物理内存与虚拟内存
      • 3.2 Swap 是什么,不是什么
      • 3.3 Swap 分区 vs Swap 文件:两种形式的对比
      • 3.4 swappiness:内核决策 Swap 的关键参数
    • 四、Ubuntu 中 Swap 的现状与版本背景
      • 4.1 Ubuntu 22.04 / 24.04 的默认 Swap 策略
      • 4.2 Desktop 与 Server 的 Swap 需求差异
    • 五、Swap 管理的核心命令体系
      • 5.1 查看当前 Swap 状态
      • 5.2 Swap 的启用与关闭
    • 六、案例一:查看与验证现有 Swap 配置
    • 七、案例二:创建与管理 Swap 文件(推荐方式)
      • 7.1 创建 Swap 文件完整流程
      • 7.2 配置 /etc/fstab 实现开机自动挂载
      • 7.3 调整 swappiness 参数
      • 7.4 删除 Swap 文件的正确方式
    • 八、案例三:Swap 分区的创建与管理(传统方式)
      • 8.1 使用 parted 创建 Swap 分区
      • 8.2 格式化为 Swap 类型并激活
      • 8.3 写入 fstab 实现持久化
    • 九、案例四:生产服务器场景下的 Swap 调优实践
      • 9.1 低内存 VPS 的 Swap 配置策略
      • 9.2 Java / Node.js 应用服务器的 Swap 建议
      • 9.3 配合 cgroup 的内存管理思路
    • 十、Swap 与系统休眠(Hibernate)的关系
      • 10.1 休眠需要多大的 Swap?
      • 10.2 Ubuntu 24.04 中的休眠配置
    • 十一、核心命令与配置解析
      • 11.1 free 命令深度解析
      • 11.2 swapon / swapoff 命令解析
      • 11.3 /proc/swaps 与 /proc/meminfo 文件解析
      • 11.4 vm.swappiness 参数详解
      • 11.5 /etc/fstab 中 Swap 条目解析
    • 十二、Swap 的监控与性能影响分析
      • 12.1 实时监控 Swap 使用情况
      • 12.2 判断系统是否过度依赖 Swap
      • 12.3 找出消耗内存最多的进程
    • 十三、Mermaid 流程图:Swap 工作机制与管理流程
      • 图一:Linux 内存换页决策流程
      • 图二:Swap 文件创建与持久化流程
      • 图三:Swap 故障排查流程
      • 图四:多 Swap 空间的优先级机制
    • 十四、常见问题与踩坑总结
      • 问题 1:执行 swapon 时提示 "swapon: /swapfile: insecure permissions 0644"
      • 问题 2:fallocate 创建的 Swap 文件用 mkswap 时提示错误
      • 问题 3:swapoff 命令一直卡住不响应
      • 问题 4:配置了 fstab 但重启后 Swap 没有激活
      • 问题 5:修改了 sysctl.conf 但重启后参数没有生效
      • 问题 6:系统提示 OOM,但明明有 Swap 空间
      • 问题 7:向云服务器添加 Swap 时,发现 Swap 文件创建失败提示磁盘已满
      • 问题 8:Ubuntu Desktop 上配置了 Swap 但无法使用休眠功能
      • 问题 9:如何确认 /etc/fstab 修改是否正确,不会导致系统无法启动?
      • 问题 10:系统日志中频繁出现 "swap_entry_free" 或内存相关警告
    • 十五、最佳实践建议
      • 关于 Swap 大小的选择
      • 关于 Swap 位置的选择
      • 关于 swappiness 的配置原则
      • 关于 Swap 监控的建议
      • 关于 /etc/fstab 修改的安全习惯
      • 关于 Swap 与容器化环境
      • 关于配置文件修改的通用原则
    • 十六、扩展知识点
      • 16.1 OOM Killer:内存耗尽时 Linux 的应急机制
      • 16.2 Zswap 与 Zram:内存压缩技术
      • 16.3 Huge Pages 与数据库内存管理
    • 十七、完整操作流程回顾
    • 十八、总结
    • 🧧 学习福利 · 限时开放 🧧
    • 🫵 Who am I?

一、前言:内存满了,系统不该直接崩溃

我第一次在生产环境里遇到 OOM(Out of Memory)问题,是在一台只有 1GB 内存的 VPS 上部署 Java 应用。系统运行了几天之后突然没有响应,SSH 连进去之后发现进程已经被内核强制杀掉了。日志里留下了一行让我印象深刻的记录:

Out of memory: Kill process 1847 (java) score 892 or sacrifice child

那是我第一次真正理解 Swap 的意义。在那之前,我一直以为 Swap 只是"备用内存",甚至觉得有了足够的物理内存就完全不需要它。但那次事故让我意识到,内存管理远不是"买够内存就行"这么简单。

Swap 机制是 Linux 内核内存管理体系中相当重要的一环。它不是什么高深的技术,也不是只有运维工程师才需要了解的知识。对于任何在 Ubuntu 上跑 Java 服务、部署 Docker 容器、运行数据库或者只是在低配机器上学习 Linux 的人来说,理解 Swap 的工作方式,都会让你对系统的行为有更清晰的判断。

这篇文章是《滚雪球学 Ubuntu》第九章的第五节。在前面几节里,我们已经了解了磁盘分区的基础结构、如何使用 lsblk 和 fdisk 查看磁盘信息,以及如何格式化和挂载磁盘。这一节我们把焦点放在一个特殊的存储用途上:把磁盘空间用作内存的延伸。

二、本文要解决什么问题

学完这篇文章,你应该能够独立完成以下事情:

理解层

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询