Ubuntu管理SWAP空间
一、SWAP 空间基础概念
1.1 什么是 SWAP?
当 Linux 系统的物理内存(RAM)耗尽时,内核会将内存中不活跃的“页面”移动到硬盘上的一个预配置区域,这个区域就是 SWAP 空间。物理内存与 SWAP 空间的总和称为虚拟内存。
1.2 SWAP 的两种形式
- SWAP 分区:硬盘上一个独立的、专门用于交换的分区。
- SWAP 文件:文件系统中的一个特殊文件,功能与分区相同。
注意:在虚拟机中安装 Ubuntu 时,系统通常不会自动创建 SWAP 空间,需要手动配置。
1.3 为什么需要 SWAP?
- 内存溢出保护:当 RAM 完全占满时,系统可将非关键数据移至 SWAP,防止系统崩溃(对小内存系统尤其重要)。
- 释放物理内存:将启动后很少使用的程序“页面”交换出去,为更活跃的程序腾出 RAM。
- 休眠支持:系统休眠(Hibernate)功能需要 SWAP 空间来保存内存状态。
1.4 SWAP 的潜在缺点
- 速度差异:RAM 的访问速度是纳秒级,而硬盘(即使是 SSD)是毫秒级,速度相差数个数量级。
- 系统变慢:频繁的交换操作(称为“Thrashing”)会导致系统响应迟缓。
二、检查现有 SWAP 空间
在开始操作前,首先检查系统当前的 SWAP 配置。
2.1 查看所有活动的 SWAP 空间
1 | sudo swapon --show |
如果输出为空,则表示系统未启用任何 SWAP 空间。
2.2 查看内存与 SWAP 使用概况
1 | sudo free -h |
该命令会显示物理内存和 SWAP 的总量、已用量及空闲量。
三、创建 SWAP 文件(推荐方法)
与分区相比,SWAP 文件更灵活,可以轻松调整大小,且不涉及磁盘分区操作。以下是创建 2GB SWAP 文件的完整步骤。
3.1 步骤 1:创建空白文件
1 | sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 |
if=/dev/zero:输入源,一个输出全零字节的特殊设备。of=/swapfile:输出文件路径。bs=1M:块大小为 1MB。count=2048:块数量。计算:1MB × 2048 = 2GB。提示:要创建不同大小的文件,只需修改
count值(例如count=1024为 1GB)。
3.2 步骤 2:设置正确的文件权限
SWAP 文件必须严格限制访问权限,防止被普通用户读取。
1 | sudo chmod 600 /swapfile |
3.3 步骤 3:将文件格式化为 SWAP 空间
1 | sudo mkswap /swapfile |
此命令会在文件上设置特殊的 SWAP 签名。
3.4 步骤 4:激活 SWAP 文件
1 | sudo swapon /swapfile |
现在,SWAP 文件已加入系统交换池并立即生效。
3.5 步骤 5:配置永久生效(开机自动启用)
编辑 /etc/fstab 文件,在末尾添加一行:
1 | sudo nano /etc/fstab |
添加以下内容:
1 | /swapfile swap swap defaults 0 0 |
保存并退出(Ctrl+X,然后按 Y 确认)。
3.6 步骤 6:验证创建结果
再次运行检查命令,确认 SWAP 文件已成功激活:
1 | sudo swapon --show |
四、优化 SWAP 使用行为:调整 Swappiness
4.1 什么是 Swappiness?
swappiness 是一个内核参数(范围 0-100),用于控制内核使用 SWAP 空间的积极程度。
- 值越低(如 10):内核尽量避免使用 SWAP,除非绝对必要。
- 值越高(如 80):内核更积极地将内存页面交换出去。
- Ubuntu 默认值:
60
4.2 查看当前 Swappiness 值
1 | cat /proc/sys/vm/swappiness |
4.3 临时调整 Swappiness 值
例如,设置为 40(对服务器更友好):
1 | sudo sysctl vm.swappiness=40 |
4.4 永久调整 Swappiness 值
编辑 /etc/sysctl.conf 文件:
1 | sudo nano /etc/sysctl.conf |
在文件末尾添加或修改以下行:
1 | vm.swappiness=40 |
保存后,运行以下命令使更改立即生效:
1 | sudo sysctl -p |
最佳实践建议:
- 桌面系统:
30-60(平衡响应性与内存使用)。 - 服务器/数据库:
10-30(减少慢速交换,优先使用 RAM)。 - 高性能计算/内存充足时:
1-10(几乎禁用交换,除非紧急)。
五、删除 SWAP 文件
如果您不再需要某个 SWAP 文件,请按以下步骤安全移除。
5.1 步骤 1:停用 SWAP 文件
1 | sudo swapoff -v /swapfile |
-v 参数显示详细过程。
5.2 步骤 2:从 /etc/fstab 中移除配置
编辑 /etc/fstab 文件,删除或注释掉之前添加的 /swapfile 那一行。
1 | sudo nano /etc/fstab |
5.3 步骤 3:删除物理文件
1 | sudo rm /swapfile |
六、调整 SWAP 空间大小
6.1 调整 SWAP 分区大小(复杂)
调整分区大小通常需要:
- 使用
swapoff停用分区。 - 使用
GParted等图形化分区工具或parted命令行工具调整分区边界。 - 使用
mkswap重新格式化。 - 使用
swapon重新激活。注意:此操作有风险,且需要分区后方有未分配的连续空间。
6.2 调整 SWAP 文件大小(简单推荐)
这是 SWAP 文件的最大优势。例如,将现有的 2GB 文件扩容到 4GB:
步骤 1:停用当前 SWAP 文件
1 | sudo swapoff /swapfile |
步骤 2:调整文件大小
1 | # 方法A:使用 dd 追加 2GB(总大小变为 4GB) |
步骤 3:重新设置权限并格式化
1 | sudo chmod 600 /swapfile |
步骤 4:重新激活 SWAP 文件
1 | sudo swapon /swapfile |
步骤 5:验证新大小
1 | sudo swapon --show |
七、SWAP 空间大小规划建议
| 系统物理内存 (RAM) | 推荐 SWAP 大小 | 休眠支持所需 SWAP |
|---|---|---|
| ≤ 2 GB | RAM 的 2 倍 | RAM 的 2-3 倍 |
| 2 - 8 GB | 等于 RAM 大小 | RAM 的 1.5 倍 |
| 8 - 64 GB | 至少 4 GB | RAM 的 1 倍 |
| > 64 GB | 至少 4 GB(主要用于休眠) | RAM 的 0.5 倍 |
说明:
- 对于现代拥有大容量 RAM(如 16GB+)的系统,SWAP 的主要作用已从“内存溢出缓冲”转变为支持系统休眠。
- 如果完全不需要休眠功能,且内存充足,可以设置一个较小的 SWAP(如 1-2GB)作为安全缓冲。
八、总结与最佳实践
- 检查先行:操作前务必使用
swapon --show和free -h了解当前状态。 - 首选文件:对于大多数用户,创建 SWAP 文件 比调整分区更安全、灵活。
- 合理规划大小:根据你的 RAM 大小和用途(是否休眠)参考上表。
- 优化 Swappiness:为你的工作负载(桌面/服务器)设置合适的值,以平衡性能。
- 持久化配置:任何更改都要记得更新
/etc/fstab和/etc/sysctl.conf。 - 监控使用:定期使用
free -h或htop监控 SWAP 使用率。如果 SWAP 被频繁使用(>20%),应考虑增加物理内存。