🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。🎯适合人群:Linux 初学者、Ubuntu 新手、计算机专业学生、后端 / 运维 / 测试入门同学、想搭建 Linux 开发环境的开发者、准备学习服务器部署的同学,以及想从 Windows 过渡到 Ubuntu 工作流的用户。从“会打开终端”到“能管理系统”,从“复制命令”到“理解 Linux 思维”,这一次,我们不零散学,而是一路滚雪球!🎉限时福利:当前专栏活动中,一次订阅,终身阅读,后续更新章节全部免费解锁👉 立即查看👈️演示环境说明:开发工具:Visual Studio Code / JetBrains 系列 IDE / Vim / NanoUbuntu版本:Ubuntu 22.04 LTS / Ubuntu 24.04 LTS,推荐 Ubuntu 24.04 LTSLinux内核版本: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 判断系统是否过度依赖 Swap12.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 查看磁盘信息,以及如何格式化和挂载磁盘。这一节我们把焦点放在一个特殊的存储用途上:把磁盘空间用作内存的延伸。二、本文要解决什么问题学完这篇文章,你应该能够独立完成以下事情:理解层
