Ubuntu 系统配置与优化 Swap 交换空间指南

本文详细介绍如何在 Ubuntu 系统中通过 Swap 文件扩展虚拟内存。涵盖从空间规划、创建使能到持久化配置的全过程,并针对服务器性能提供 swappiness 等内核参数的调优建议。当服务器的物理内存(RAM)耗尽时,操作系统可能会触发 OOM (Out of Memory) 机制强制杀掉进程,甚至导致系统崩溃。

当服务器的物理内存(RAM)耗尽时,操作系统可能会触发 OOM (Out of Memory) 机制强制杀掉进程,甚至导致系统崩溃。Swap(交换空间)是 Linux 系统的一种兜底机制,它利用硬盘空间模拟内存,将暂时不活跃的数据从 RAM 转移到磁盘上,从而为当前运行的任务腾出空间。

对于云服务商提供的 VPS 实例,手动配置 Swap 是预防内存溢出、保障服务稳定性的标准操作。

Swap 的核心逻辑:文件还是分区?

在 Linux 中,可以通过“交换分区(Swap Partition)”或“交换文件(Swap File)”来实现。在现代云基础设施中,交换文件是更优的选择:

  • 灵活性高:无需重新调整磁盘分区,随时可以创建、删除或调整大小。
  • 性能相近:在 SSD 存储盛行的今天,交换文件与交换分区的性能差异几乎可以忽略不计。
  • 兼容性好:适用于绝大多数虚拟化环境,避免了修改底层块设备结构的风险。

第一步:容量规划与现状检查

在动手之前,先评估服务器当前的内存状态。执行以下命令查看系统是否已经开启了 Swap:

sudo swapon --show

如果返回为空,说明当前未启用 Swap。也可以通过 free -h 确认:

              total        used        free      shared  buff/cache  available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

推荐的大小设置

关于 Swap 的大小,可以参考以下经验值:

物理内存 (RAM) 推荐 Swap 大小
小于 2 GB 2 倍 RAM
2 GB – 8 GB 1 倍 RAM
8 GB – 64 GB 至少 4 GB
大于 64 GB 4 GB 起步,视具体应用需求而定

第二步:创建 Swap 文件

确认磁盘剩余空间充足(使用 df -h 检查)后,开始创建交换文件。这里以创建 1GB 的文件为例:

1. 分配空间

推荐使用 fallocate 命令,它能立即分配指定大小的空间:

sudo fallocate -l 1G /swapfile

如果提示 fallocate failed: Operation not supported(常见于 Btrfs 文件系统),请改用 dd

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

2. 设置权限

Swap 文件存储的是内存中的原始数据,必须严格限制权限,仅允许 root 用户读写。

sudo chmod 600 /swapfile

3. 格式化并启用

将该文件转化为 Swap 格式并激活:

sudo mkswap /swapfile
sudo swapon /swapfile

现在再次运行 free -h,你应该能看到 Swap 行已经有了 1.0Gi 的总容量。

第三步:配置持久化

上述操作在重启后会失效。要让系统在启动时自动挂载 Swap,需要修改 /etc/fstab 文件。

建议先备份原文件:

sudo cp /etc/fstab /etc/fstab.bak

将挂载信息追加到文件末尾:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

第四步:内核参数调优

Swap 的性能表现很大程度上取决于两个内核参数:swappinessvfs_cache_pressure

1. 调整 Swappiness

swappiness(取值 0-100)决定了内核将数据从 RAM 转移到 Swap 的频率。

  • 默认值 60:通常更适合个人桌面系统。
  • 推荐值 10:对于服务器,我们希望系统尽可能利用 RAM,只有在必要时才使用较慢的磁盘 Swap。

临时生效:

sudo sysctl vm.swappiness=10

2. 调整 Cache 压力

vfs_cache_pressure 影响内核回收索引节点(inode)和目录项(dentry)缓存的倾向。默认 100 可能会导致频繁的磁盘 I/O,将其调低(如 50)有助于性能提升。

临时生效:

sudo sysctl vm.vfs_cache_pressure=50

3. 永久生效

编辑 /etc/sysctl.conf,在末尾添加以下两行:

vm.swappiness=10
vm.vfs_cache_pressure=50

维护与常见问题

如何调整大小或删除 Swap?

如果需要改变 Swap 大小,必须先关闭它:

  1. sudo swapoff /swapfile
  2. 删除旧文件 sudo rm /swapfile
  3. 重复创建步骤,分配新的大小。
  4. 记得检查 /etc/fstab 中的路径是否一致。

性能监控建议

虽然 Swap 提供了安全感,但它不是 RAM 的真正替代品。如果你的服务器频繁出现大量的 Swap 换入/换出(可通过 vmstat 1siso 列观察),说明内存资源已经成为严重的性能瓶颈。

在这种情况下,与其增加 Swap 大小,不如考虑升级服务器的物理内存,或者优化内存占用过高的应用程序。

关于

关注我获取更多资讯

月球基地博客公众号二维码,扫码关注获取更多 AI 与编程资讯
📢 公众号
月球基地博客作者个人微信二维码,扫码交流 AI 与编程话题
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计