一份正确、循序渐进的指南,教你在 Ubuntu 22.04/24.04 上创建交换文件、使其永久生效并调优 swappiness——非常适合低内存 VPS 和云服务器。
SKYLINE Engineering @skyline
发布时间: 2026 年 6 月 9 日
阅读时长: 6 分钟
什么是交换空间,何时需要它?
交换空间(swap)是磁盘上的一块区域,Linux 将其用作内存(RAM)的溢出空间。当物理内存被占满时,内核会把不活跃的内存页移动到交换空间,从而为活跃进程腾出 RAM。交换空间并不会让服务器变快——磁盘远比内存慢——但它充当一道安全网,能在内存不足时防止内核的内存不足(OOM, Out-Of-Memory)杀手突然终止进程。
在内存只有 1–4 GB 的小型 VPS 和云服务器上,交换空间尤其有价值:一次流量高峰、一条数据库查询,或一次 composer/npm 构建都可能耗尽内存。许多控制面板和应用栈也通常要求系统中存在一定的交换空间。
本教程面向 Ubuntu 22.04 和 24.04 LTS,但由于使用的工具完全相同,这些步骤几乎适用于任何现代 Linux 发行版(Debian、Rocky、AlmaLinux)。如果你正在部署一台新服务器,可以在 Skyline Cloud VPS 上完全照搬这些步骤。
第 1 步 — 检查是否已有交换空间
在创建交换空间之前,先确认尚不存在交换空间。同时运行两个交换文件既浪费资源,又容易造成混乱。
sudo swapon --show
如果该命令没有任何输出,说明你没有处于活跃状态的交换空间。你也可以一眼看到内存与交换空间的总量:
free -h
在 Swap 这一行中,总量为 0B 即可确认目前还没有交换空间。
第 2 步 — 选择交换空间大小
并不存在唯一正确的大小,但对于服务器而言,以下准则是一个合理的起点:
| 内存 | 推荐交换空间 |
|---|---|
| 1 GB | 2 GB |
| 2 GB | 2–4 GB |
| 4 GB | 4 GB |
| 8 GB 或以上 | 2–4 GB(如果内存非常充裕,也可不设) |
交换空间不应替代充足的内存。如果你的服务器持续依赖交换空间,正确的解决办法是增加内存——通过调整云套餐即可轻松完成,而无需购买新硬件。
第 3 步 — 创建交换文件
请先确认有足够的可用磁盘空间:
df -h /
创建一个 2 GB 的交换文件。fallocate 命令会即时分配空间:
sudo fallocate -l 2G /swapfile
验证文件大小:
ls -lh /swapfile
如果 fallocate 不可用,或你的文件系统对它支持不够完善(某些环境需要完整写入的文件),则改用 dd。这种方式较慢,但总能奏效:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
第 4 步 — 加固并格式化文件
交换文件必须仅对 root 可读可写,否则其内容将被暴露。将权限设置为 600:
sudo chmod 600 /swapfile
现在将该文件标记为 Linux 交换区:
sudo mkswap /swapfile
你会看到输出,其中确认了交换区标签和一个 UUID。
第 5 步 — 启用交换空间
立即激活交换文件:
sudo swapon /swapfile
确认它已生效:
sudo swapon --show
free -h
此时 free -h 中的 Swap 行应显示出你的 2 GB。交换空间已激活——但仅在下次重启之前有效。
第 6 步 — 让交换空间永久生效
要在重启后仍保留交换文件,需将其添加到 /etc/fstab。请先备份该文件:
sudo cp /etc/fstab /etc/fstab.bak
使用 tee 安全地追加交换条目:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
各字段含义为:文件路径、挂载点(交换空间用 none)、文件系统类型(swap)、选项(sw)、dump(0)以及 fsck 检查顺序(0)。验证该行已正确添加:
grep swapfile /etc/fstab
此处的拼写错误可能导致系统无法正常启动,因此请仔细核对拼写,并确认你使用的是 >>/tee -a(追加)而非覆盖整个文件。
第 7 步 — 调优 swappiness
swappiness 控制内核将数据移入交换空间的积极程度,取值范围为 0–100。Ubuntu 的默认值为 60,对桌面系统而言没问题,但对服务器来说过于激进——它可能在 RAM 仍有余量时就将数据推送到缓慢的磁盘上。
查看当前值:
cat /proc/sys/vm/swappiness
对于典型服务器,10 是一个不错的值:仅在 RAM 确实吃紧时才使用交换空间。现在就应用它:
sudo sysctl vm.swappiness=10
使其在重启后依然生效:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
你还可以选择性地降低 vfs_cache_pressure,让文件系统元数据在缓存中保留更久:
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swappiness.conf
第 8 步 — 重启后验证(可选)
为确保配置在重启后依然有效,请重启并重新检查:
sudo reboot
重新登录后:
sudo swapon --show
cat /proc/sys/vm/swappiness
两者都应反映出你设置的值。
移除或调整交换空间大小
要移除交换空间,先禁用它,从 /etc/fstab 中删除对应行,然后再删除文件:
sudo swapoff /swapfile
sudo sed -i '/\/swapfile/d' /etc/fstab
sudo rm /swapfile
要调整大小,只需删除旧文件,再按上述步骤创建一个所需大小的新文件即可。
关于 SSD 与云磁盘的说明
现代 NVMe 和 SSD 存储能够很好地处理交换写入,合理调优的交换文件所带来的少量磨损可以忽略不计。在云服务器上,交换空间还能在你决定是否升级内存期间为你争取一些缓冲空间。对于受内存制约的工作负载,最干净的长期解决方案是增加内存,而非增加交换空间。
在托管云服务器上运行
交换空间是一项能快速见效的优化,但一台健康的服务器还需要可靠的存储、快照,以及按需扩展内存的余量。Skyline Cloud 在沙特境内运行,符合 PDPL/NCA 的数据驻留要求,提供本地阿拉伯语支持和透明的定价——让你的数据和工作负载都留在沙特阿拉伯。将你的 VPS 与企业邮箱托管和托管备份搭配使用,即可全面覆盖整个技术栈。
前往 VPS 与云服务器专区了解各类套餐,然后创建你的 Skyline Cloud 账户,在几分钟内即可拥有一台经过调优、可投入生产的服务器。
Comments
0 total · 0 threads