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

本文详细介绍如何在 Ubuntu 系统中通过 Swap 文件扩展虚拟内存。涵盖从空间规划、创建使能到持久化配置的全过程,并针对服务器性能提供 swappiness 等内核参数的调优建议。

阅读时长: 3 分钟
共 1344字
作者: eimoon.com

当服务器的物理内存(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 设计