当 Linux 系统的物理内存耗尽时,内核会将不活跃的内存页面迁移到 SWAP 空间中。这个交换空间既可以是专用的 SWAP 分区,也可以是SWAP 文件。但在虚拟机中运行 Ubuntu 时,系统通常不会自动创建 SWAP 空间,这往往会带来困扰——内存不足时,系统可能会直接崩溃或卡死。

本文将详细介绍如何在 Ubuntu 中创建、删除和调整 SWAP 空间,同时分享一些实用的运维技巧,帮助你更好地管理交换空间。
Linux 中的 SWAP 空间解析
计算机的物理内存(RAM)被 Linux 内核划分为一个个称为“页面”的块。当系统需要释放内存时,它会将这些页面复制到预先分配好的次要存储设备(通常是 HDD 或 SSD)上,这个过程就叫“交换”。而预留给交换操作的存储区域就是“SWAP 空间”。物理内存与 SWAP 空间的总和,就是我们常说的虚拟内存。
交换的必要性
为什么要启用交换?主要原因包括:
- 当内存需求超过可用物理内存时,将不重要的页面换出,可以腾出空间给关键进程。
- 程序启动初期,大部分页面很少被用到,交换这些页面能为其他应用释放内存资源。
- 如果没有分配任何 SWAP 空间,一旦 RAM 完全占满,系统极有可能直接崩溃——尤其是内存较小的设备。
但交换也伴随一定代价:
- 次要存储设备(HDD、SSD 等)的读写速度远低于 RAM。RAM 的访问速度以纳秒计,而磁盘则是毫秒级,两者差距达数个数量级。
- 由于速度差异,交换过程相对缓慢。如果系统发生大量交换操作,整体响应速度会明显下降。
SWAP 空间的类型
在 Linux 中,SWAP 空间主要有两种形式:
- 专用的 SWAP 分区:这种分区只能用于交换,无法存储其他文件。
- SWAP 文件:可放置在文件系统的任意位置,灵活度更高。
具体选择多大容量,取决于你的物理内存大小和实际工作负载。
Ubuntu 中的 SWAP 文件
Ubuntu 默认情况下倾向于使用专用的 SWAP 分区。安装过程中系统通常会自动创建,但如果需要手动管理,你也可以随时创建和调整 SWAP 文件。
查看 SWAP 空间
在动手操作之前,首先用以下命令检查系统是否已启用 SWAP:
sudo swapon --show

查看当前 SWAP 空间状态
该命令会列出所有已启用的 SWAP 空间(包括分区和文件)。如果输出为空,说明当前未启用任何交换空间。
虽然一台 Linux 机器可以同时存在多个 SWAP 空间,但这种情况并不常见。
创建 SWAP 文件
与 SWAP 分区相比,SWAP 文件的优势在于文件大小可以随时调整,无需改动磁盘分区表。下面演示如何创建一个新的 SWAP 文件并将其加入交换池。
1、在终端中执行以下命令,创建一个空白文件:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

使用 dd 命令创建 SWAP 文件
- 文件大小 = 1M × 2048 = 2G。如需调整大小,修改
count参数即可。 /dev/zero是 Linux 的特殊设备,每次读取都会返回零字节。- 虽然也可以使用
fallocate等工具创建文件,但某些文件系统下可能存在问题,dd方法更加稳妥。
2、设置正确的文件权限:
sudo chmod 600 /swapfile
3、使用 mkswap 将文件格式化为 SWAP 空间:
sudo mkswap /swapfile
4、激活该 SWAP 文件,将其加入交换池:
sudo swapon /swapfile
5、若要永久生效,需将 SWAP 文件路径写入 /etc/fstab:
/swapfile swap swap defaults 0 0

配置 /etc/fstab 实现 SWAP 文件开机自动挂载
6、使用 swapon 或 free 命令验证:
sudo swapon --show ## 或者 sudo free -h

验证 SWAP 文件是否正常启用
调整 Swappiness 值
Swappiness 是 Linux 内核的一个参数,控制系统使用 SWAP 的积极程度。取值范围为 0 到 100:数值越低,内核越倾向于少用交换;数值越高,则越频繁地将内存页面换出。
Ubuntu 的默认值为 60,可通过以下命令查看:
cat /proc/sys/vm/swappiness
对于桌面环境,60 还算合理;但如果是服务器,该值会导致 SWAP 使用过于频繁,通常需要调低。例如,将其改为 40:
sudo sysctl vm.swappiness=40

查看并临时调整 Swappiness 值
若希望重启后依然生效,需在 /etc/sysctl.conf 中添加一行:
vm.swappiness=40
最佳的 swappiness 值取决于你的工作负载和内存使用习惯,建议逐步测试,找到性能与稳定性之间的平衡点。
删除 SWAP 文件
当不再需要某个 SWAP 文件时,可按以下步骤移除:
1、停用该 SWAP 文件:
sudo swapoff -v /swapfile
2、从 /etc/fstab 中删除对应的行。
3、删除文件:
sudo rm /swapfile

彻底删除 SWAP 文件
调整 SWAP 空间大小
根据 SWAP 的类型(分区或文件),调整方法有所不同。
调整 SWAP 分区大小
只有分区后面存在未分配空间时,才能扩大 SWAP 分区;否则只能缩小。如果你使用 GNOME 桌面,可以通过“磁盘”应用查看分区布局。

使用 GNOME 磁盘工具调整 SWAP 分区
也可以借助 GParted 进行可视化操作。

使用 GParted 工具管理 SWAP 分区大小
如截图所示,有些系统的交换分区紧邻根分区,可能没有多余空间进行扩展。
调整 SWAP 文件大小
1、先将文件从交换池中移出:
sudo swapoff /swapfile
2、使用 dd 命令增加文件大小(例如增加 2GB):
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc

通过 dd 命令扩展 SWAP 文件大小
3、将 SWAP 文件大小增加到 2GB 后,重新格式化:
sudo mkswap /swapfile
4、再次启用该文件:
sudo swapon /swapfile
本文系统梳理了在 Ubuntu 中管理 SWAP 空间的完整流程,涵盖 SWAP 空间的类型、创建与删除 SWAP 文件、调整 swappiness 参数,以及调整 SWAP 分区和文件大小的具体方法。希望这些实用技巧能帮助你在日常运维中更高效地管理交换空间,避免内存瓶颈带来的问题。
