开篇:小内存 VPS 为什么需要 Swap?
如果你手里有台 1GB 内存的 VPS(比如甲骨文的 AMD 小鸡、各种低配云服务器),在运行 Ghost 博客、WordPress 或者编译程序时,可能会遇到内存不够的尴尬情况——系统直接把进程杀掉(OOM Killed)。
这种时候,Swap 交换空间就是你的救命稻草。
什么是 Swap?简单说就是”硬盘充当临时内存”
Swap 其实就是用硬盘空间模拟内存。当物理内存(RAM)不够用时,系统会把一部分暂时不用的数据挪到 Swap 里,给急需内存的程序腾地方。
通俗类比:
- 物理内存 = 你的办公桌
- Swap = 旁边的抽屉
- 当桌面放不下时,把不常用的东西塞进抽屉,需要时再拿出来
为什么推荐 2GB?
- 对于 1GB 内存的服务器,2倍内存大小的 Swap 是经典配置
- 既能应对临时内存峰值,又不会占用太多硬盘空间
好了,废话不多说,下面直接开干!
正文:6步创建并永久启用 Swap
整个过程大概 5分钟,适用于 Ubuntu、Debian、CentOS 等主流 Linux 发行版。
第一步:使用 fallocate 快速创建 Swap 文件
传统的 dd 命令创建文件很慢,我们用更快的 fallocate:
# 创建一个 2GB 大小的文件,路径为 /swapfile
sudo fallocate -l 2G /swapfile
这个命令的作用:
fallocate:瞬间分配磁盘空间(比dd快几十倍)-l 2G:指定文件大小为 2GB/swapfile:文件保存路径(可以改,但建议用默认的)
执行后没有任何输出,这是正常的。我们接着验证文件是否创建成功:
ls -lh /swapfile
应该会看到:
-rw-r--r-- 1 root root 2.0G Jan 4 10:30 /swapfile
第二步:设置严格的安全权限(非常重要!)
Swap 文件里可能包含敏感数据(比如密码、密钥),必须确保只有 root 能读写:
# 将 /swapfile 的权限设置为 600
sudo chmod 600 /swapfile
权限解释:
600= 只有所有者(root)有读写权限,其他所有人没有任何权限- 这是 Linux 系统安全的基本原则
再次检查权限:
ls -lh /swapfile
现在应该显示:
-rw------- 1 root root 2.0G Jan 4 10:30 /swapfile
前面的 -rw------- 就是 600 权限,完美!
第三步:格式化为 Swap 格式
现在这个文件还只是一个普通文件,需要告诉系统”这是 Swap 空间”:
# 格式化为 swap 格式
sudo mkswap /swapfile
成功后会看到:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
出现 UUID 就说明格式化成功了!
第四步:启用 Swap 空间
让系统开始使用这个 Swap 文件:
# 启用 swap
sudo swapon /swapfile
同样,没有输出就是最好的输出。
第五步:验证 Swap 是否生效
用 free 命令查看内存和 Swap 的使用情况:
free -h
-h 参数的意思:human-readable(人类友好的单位,如 G、M、K)
你应该会看到类似这样的输出:
total used free shared buff/cache available
Mem: 981Mi 169Mi 131Mi 0.0Ki 680Mi 662Mi
Swap: 2.0Gi 0B 2.0Gi
重点看最后一行:
Swap: 2.0Gi—— ✅ 说明 Swap 已经成功启用!0B是当前使用量(系统还有足够的物理内存,所以暂时没用到 Swap)
第六步:让 Swap 永久生效(关键一步!)
⚠️ 注意:上面的 swapon 命令只在当前会话有效,服务器重启后 Swap 会失效。
为了让服务器每次开机都自动挂载 Swap,需要把配置写入 /etc/fstab 文件:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
这个命令做了什么:
echo '...':生成配置内容|:管道符,把前面的输出传给后面的命令sudo tee -a /etc/fstab:以 root 权限追加(-a)到/etc/fstab文件末尾
验证是否写入成功:
tail -1 /etc/fstab
应该显示:
/swapfile none swap sw 0 0
完美!现在重启服务器,Swap 也会自动挂载。
进阶优化:调整 Swappiness 值(强烈推荐)
什么是 Swappiness?
swappiness 是 Linux 内核参数,控制系统使用 Swap 的积极程度:
- 值范围:0 到 100
- 值越高:系统越早使用 Swap(默认通常是 60)
- 值越低:系统尽量使用物理内存,只有在必要时才用 Swap
为什么要调低?
对于 VPS 和网站服务器,默认值 60 太高了,会导致:
- ❌ 系统过早使用 Swap(硬盘 I/O 比内存慢几十倍)
- ❌ 网站响应速度变慢
- ❌ 数据库查询延迟增加
推荐值:10
- ✅ 让系统优先使用物理内存
- ✅ 只在内存真正不够时才用 Swap
- ✅ 性能和稳定性的最佳平衡
实操:修改 Swappiness
方法一:临时修改(立即生效,重启后失效)
sudo sysctl vm.swappiness=10
验证当前值:
cat /proc/sys/vm/swappiness
应该显示 10。
方法二:永久修改(重启后依然生效)
编辑系统配置文件:
sudo nano /etc/sysctl.conf
在文件最末尾添加一行:
vm.swappiness=10
保存并退出:
- 按
Ctrl + X - 按
Y确认保存 - 按
Enter退出
让配置立即生效(不用重启):
sudo sysctl -p
完美!现在你的服务器会更聪明地使用 Swap。
常见问题 FAQ
Q1:我的服务器是 512MB 内存,应该创建多大的 Swap?
推荐 1GB。规则是:
- 1GB 以下内存 → Swap = 内存的 2 倍
- 1-4GB 内存 → Swap = 内存大小或 2GB
- 4GB 以上内存 → Swap = 1-2GB 即可(甚至可以不用)
Q2:Swap 会拖慢系统吗?
看情况:
- ✅ 合理配置 + 调低 Swappiness = 不会影响性能,反而能避免 OOM
- ❌ 没调 Swappiness + 频繁使用 Swap = 硬盘狂读写,卡得要死
Q3:可以把 Swap 文件放在其他位置吗?
可以!只要路径一致即可:
sudo fallocate -l 2G /var/swap
sudo chmod 600 /var/swap
sudo mkswap /var/swap
sudo swapon /var/swap
echo '/var/swap none swap sw 0 0' | sudo tee -a /etc/fstab
Q4:如何删除 Swap?
# 1. 停用 Swap
sudo swapoff /swapfile
# 2. 从 fstab 中删除配置行
sudo nano /etc/fstab # 手动删除 /swapfile 那一行
# 3. 删除文件
sudo rm /swapfile
总结:Swap 配置的最佳实践
✅ 推荐配置:
- 1GB 内存 VPS → 创建 2GB Swap
- 设置 600 权限(安全第一)
- 写入
/etc/fstab永久挂载 - 设置
vm.swappiness=10(性能优化)
✅ 适用场景:
- Ghost、WordPress 等博客程序
- 编译代码(make、npm build)
- Docker 容器运行
- 临时任务处理
❌ 不推荐:
- 生产环境高负载服务器(应该直接加内存)
- SSD 寿命敏感的场景(频繁写入会缩短寿命)