Linux 创建 SWAP 交换分区教程:内存不够时的一根救命稻草

什么时候需要创建 SWAP

你的服务器内存只有 1G 甚至 512M,跑了个 MySQL 再来个 Nginx,系统就开始报 Out of Memory 直接杀进程——这种情况,加一块 SWAP 交换分区是最快最省钱的解决方案。

SWAP(交换分区)就是拿硬盘空间当内存用。虽然速度比物理内存慢得多,但总比服务直接崩溃强。对于内存紧张的小型 VPS 或测试环境,SWAP 是一根救命稻草。

第一步:检查当前内存和 SWAP 状态

free -h
使用 free 查看内存和 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
使用 mkswap 格式化 SWAP 文件
使用 mkswap 将文件格式化为交换分区格式

启用它:

swapon /swapfile

验证是否生效:

free -h
swapon --show

应该能看到 Swap 行有了 2G 的总量。

第四步:设置开机自动挂载

和磁盘挂载一样,SWAP 也需要写入 /etc/fstab 才能开机自动生效:

echo '/swapfile none swap sw 0 0' >> /etc/fstab
配置 SWAP 开机自动挂载
将 SWAP 配置写入 /etc/fstab 实现开机自动启用

这行配置的含义:

  • /swapfile——SWAP 文件路径
  • none——不需要挂载点
  • swap——文件系统类型为 swap
  • sw——挂载选项(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,稳定运行不翻车。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享