VPS 内存就那么点,跑着 LNMP、数据库、各种服务,内存一满就卡,甚至直接被系统 OOM 杀掉进程。很多低配 VPS(1G、512M)看起来"该卡"——其实可以通过 swap 交换空间 缓解:把一部分磁盘当作临时内存,内存不够时把暂时不用的数据挪过去,让系统不至于因内存耗尽而崩溃。这篇文章教你创建、扩容、调优 swap。
一、什么是 swap
swap 是 Linux 的"交换分区/文件":当物理内存不够时,系统会把一部分占用不活跃的内存数据"换出"到磁盘上的 swap 空间,腾出物理内存给正在运行的程序;需要时再换回。
作用:
- 防止 OOM:内存耗尽时,系统不是直接崩,而是用 swap 兜底
- 给低配机器续命:1G 内存也能跑起来多个服务
- 节省内存成本:临时性压力用 swap 顶住
注意:swap 是磁盘,读写比内存慢得多。它只是"应急",长期靠 swap 是治标不治本,别指望用它替代加内存。
二、先看当前内存和 swap 情况
free -h
# total used free
# Mem: 985M 812M 80M
# Swap: 1.0G 12M 988M
Swap 行显示当前 swap 大小。若没有 Swap 行(或显示 0),说明还没配置。
三、创建 swap 文件(推荐,不损伤分区)
swap 可以用分区,但更灵活的是用"swap 文件"——想多大就多大,不占专门分区。
1. 创建指定大小的文件(这里以 2G 为例):
fallocate -l 2G /swapfile # Ubuntu/CentOS 7 支持
# 若 fallocate 报错,用 dd:
dd if=/dev/zero of=/swapfile bs=1M count=2048
2. 设置权限(swap 文件含敏感数据,防普通用户读取):
chmod 600 /swapfile
3. 格式化为 swap 并启用:
mkswap /swapfile
swapon /swapfile
4. 设置开机自动挂载:
把下面这行追加到 /etc/fstab:
/swapfile none swap sw 0 0
四、验证 swap 已生效
swapon --show
free -h
swapon --show 能看到 swap 文件被激活,free 的 Swap 行大小相应变大。
临时关闭 swap:
swapoff /swapfile
五、如何调整 swap 大小
先关闭 → 删掉 → 重建:
swapoff /swapfile
rm -f /swapfile # 或先写 0 再删
# 重新按"三、"的步骤创建你想要的更大文件,并改 fstab
若只是临时扩大,重复"创建 + mkswap + swapon"即可,但想改固定大小建议统一重建。
六、swap 调优:swappiness
vm.swappiness 控制系统"多愿意用 swap"。默认 60(0-100,越高越倾向用 swap)。低配机器可调低,减少延迟:
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时调整(0-100,越小越少用 swap)
sysctl vm.swappiness=10
永久生效: 在 /etc/sysctl.conf 里加:
vm.swappiness=10
然后 sysctl -p 让它生效。
想更激进地减少 swap 使用、更爱用内存,可设 vm.swappiness=0;桌面机/内存小可设 30-60。服务器一般建议 10。
七、swap 该设多大
经验参考:
- 2G 内存以下:swap ≈ 物理内存的 1-2 倍
- 2G-8G:swap ≈ 与物理内存相近
- >8G:swap 设 8G 左右即可,或按需
如果没实际需求,给 1G VPS 设置 2G swap 是比较稳妥、常用的选择。
八、swap 填满说明什么
free -h 里 Swap 几乎用满,说明内存持续不足。别只加 swap,要:
- 找出吃内存的进程:
top/htop排序看内存占用 - 关掉不用的服务/插件
- 调优 PHP-FPM worker 数(参考本站 PHP 性能优化教程)
- 长期看还是建议升级内存,swap 只是兜底
九、常见问题
Q1:fallocate 创建的 swap 报错 / 系统不支持?
某些文件系统不支持 fallocate 预留,改用 dd 方式创建(dd if=/dev/zero of=/swapfile bs=1M count=大小)。
Q2:开机后 swap 又没了?
检查 /etc/fstab 那行是否写对、路径是否一致。用 cat /etc/fstab 确认,然后 swapon -a 手动启用测试。
Q3:swap 用了反而更卡?
swap 本身就是慢的,如果长期大量使用说明内存长期不足。调低 swappiness 让它少用 swap,同时想办法腾内存或升级内存。
Q4:磁盘空间够吗?
swap 文件占用磁盘。创建前用 df -h / 确认根分区有足够空间,别把磁盘塞满。
Q5:swap 和 swap 分区冲突?
两者可共存,但一般二选一即可,避免混乱。用 swap 文件就够了。
十、结语
swap 是低配 VPS 的"续命药":内存不够时,用磁盘兜底,避免系统因 OOM 崩溃。核心步骤就四步:建文件 → mkswap → swapon → 写 fstab 开机自启,再配合 swappiness 调优,1G 的机器也能稳稳跑起整套服务。但记住它只是应急手段,真正稳定还是要合理规划内存与优化服务。
