什么时候需要创建 SWAP
你的服务器内存只有 1G 甚至 512M,跑了个 MySQL 再来个 Nginx,系统就开始报 Out of Memory 直接杀进程——这种情况,加一块 SWAP 交换分区是最快最省钱的解决方案。
SWAP(交换分区)就是拿硬盘空间当内存用。虽然速度比物理内存慢得多,但总比服务直接崩溃强。对于内存紧张的小型 VPS 或测试环境,SWAP 是一根救命稻草。
第一步:检查当前内存和 SWAP 状态
free -h

输出类似:
total used free shared buff/cache available
Mem: 1.9Gi 1.2Gi 200Mi 30Mi 500Mi 500Mi
Swap: 0B 0B 0B
如果 Swap 那一行全是 0,说明没有配置交换分区。
也可以用 swapon --show 确认:
swapon --show
# 如果没有输出,说明没有启用 SWAP
第二步:创建 SWAP 文件
传统方式是用一个独立分区做 SWAP,但 VPS 和云服务器上更常用的是直接创建一个 SWAP 文件,灵活且不需要重新分区。
以下以创建 2G 的 SWAP 文件为例:
# 创建 2G 的空文件
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
bs=1M 表示每次写入 1MB,count=2048 表示写入 2048 次,总计 2GB。这个过程可能需要几十秒到几分钟,取决于磁盘速度。
更快的替代方案(推荐):
fallocate -l 2G /swapfile
fallocate 会瞬间完成,因为它只是向文件系统申请空间,不需要实际写入数据。不过某些文件系统(如 ZFS)不支持 fallocate,遇到报错就回退到 dd。
第三步:设置权限并启用
出于安全考虑,只有 root 才能读写 SWAP 文件:
chmod 600 /swapfile
然后把它格式化为 SWAP 格式:
mkswap /swapfile

启用它:
swapon /swapfile
验证是否生效:
free -h
swapon --show
应该能看到 Swap 行有了 2G 的总量。
第四步:设置开机自动挂载
和磁盘挂载一样,SWAP 也需要写入 /etc/fstab 才能开机自动生效:
echo '/swapfile none swap sw 0 0' >> /etc/fstab

这行配置的含义:
/swapfile——SWAP 文件路径none——不需要挂载点swap——文件系统类型为 swapsw——挂载选项(defaults + swapon)0 0——不做 dump 备份,不做 fsck 检查
第五步:调整 SWAP 使用策略(可选)
默认情况下,Linux 会在物理内存不够时才用 SWAP。你可以通过 swappiness 参数调整这个行为:
# 查看当前值
cat /proc/sys/vm/swappiness
# 默认通常是 60
swappiness 的值范围是 0-100:
- 0——尽量不用 SWAP,除非物理内存完全耗尽
- 60——默认值,适度使用 SWAP
- 100——积极使用 SWAP
对于 VPS,建议设为 10,减少对磁盘的读写:
sysctl vm.swappiness=10
要永久生效,添加到 /etc/sysctl.conf:
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
如何删除 SWAP
如果以后内存升级了,不再需要 SWAP,可以这样删除:
# 先关闭 SWAP
swapoff /swapfile
# 删除文件
rm /swapfile
# 从 fstab 中移除对应行
vi /etc/fstab
SWAP 文件还是 SWAP 分区
两种方式各有优劣:
- SWAP 文件——创建简单,大小随时可以改,不需要分区;性能在现代内核(3.5+)上和分区几乎一样
- SWAP 分区——传统方式,一些老旧教程还是推荐这种;但在 SSD 上性能差异可以忽略
对于 99% 的场景,SWAP 文件就够了。除非你有特殊的性能需求,否则不用纠结这个问题。
常见问题
SWAP 创建后 free 看不到
先确认 swapon --show 有没有输出。如果有但 free -h 看不到,可能是 procps 版本太旧,升级一下就好了。
dd 创建 SWAP 很慢
换用 fallocate,速度快得多。如果 fallocate 报错不支持,那就耐心等 dd 完成。
SWAP 占满了怎么办
说明物理内存严重不足,加 SWAP 只是缓解不是解决。考虑升级内存、优化服务配置,或者关闭不必要的服务。
总结
创建 SWAP 就四步:
fallocate -l 2G /swapfile # 创建文件
chmod 600 /swapfile # 设置权限
mkswap /swapfile # 格式化
swapon /swapfile # 启用
echo '/swapfile none swap sw 0 0' >> /etc/fstab # 开机自启
内存不够别硬撑,给服务器加个 SWAP,稳定运行不翻车。










