Linux VPS 增加 Swap(交换分区)保姆级教程

本教程介绍如何在 Linux VPS 上通过创建交换文件(Swap File)来扩展虚拟内存,防止小内存服务器因内存耗尽(OOM)而导致服务崩溃。


🛠 核心命令速查(快速部署)

如果您熟悉操作,可以直接按顺序执行以下命令(以创建 2GB Swap 为例):

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

📖 详细操作步骤

第一步:创建 Swap 文件

使用 fallocate 命令瞬间分配指定大小的磁盘空间。这里以创建 2GB 为例:

sudo fallocate -l 2G /swapfile

💡 避坑提示fallocate 速度极快。但在极少数情况下(如老旧文件系统或部分虚拟化架构 VPS),该命令可能会报错。如果报错,请使用传统慢速命令替代: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

💡 终极避坑:如果你的 VPS 使用的是 Btrfs 文件系统,在格式化(mkswap)之前,必须先关闭该文件的写时复制特性,否则激活必报错。只需执行一行:sudo chattr +C /swapfile 即可。

第二步:设置安全权限

为了防止其他普通用户读取 Swap 文件中的内存缓存数据,必须将权限严格限制为仅 root 可读写:

sudo chmod 600 /swapfile

第三步:格式化为 Swap 格式

将刚刚创建的文件正式初始化为交换分区格式:

sudo mkswap /swapfile

第四步:激活并启用 Swap

让系统立即开始使用这个新的虚拟内存空间:

sudo swapon /swapfile

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

上述启用命令在系统重启后会失效。执行以下命令,将配置永久写入系统配置文件 /etc/fstab 中:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

第六步:验证是否生效

检查系统当前的内存与 Swap 状态:

free -h

如果输出结果中的 Swap: 那一行显示的总量与你设置的大小(如 2.0Gi)一致,说明配置成功!


💡 进阶优化:调整 Swappiness(可选)

swappiness 参数决定了系统有多倾向于使用 Swap。取值范围是 0-100,数值越大,系统越积极地将内存数据移动到 Swap 中。

  1. 查看当前设置

    cat /proc/sys/vm/swappiness

    (通常 VPS 默认是 60)

  2. 推荐修改: 对于普通 VPS,为了保护硬盘寿命并提升物理内存利用率,推荐将值设为 1020

    sudo sysctl vm.swappiness=10
  3. 永久生效: 将以下配置写入系统配置文件,防止重启复原:

    echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

🗑 如何删除 Swap

如果未来不需要 Swap 了,可以通过以下命令完整卸载并删除:

sudo swapoff /swapfile  # 停用 Swap
sudo rm /swapfile       # 删除文件

注意:最后需要手动打开 /etc/fstab 文件,删掉包含 "/swapfile" 的那一整行配置。