VPS内存不够用?3分钟添加Swap交换分区

概述

很多小伙伴买VPS时图便宜,选了1G或2G内存的机器。跑个Docker、编译个项目就内存爆了,程序直接OOM被杀掉。

加内存要花钱,但Swap是免费方案。它利用磁盘空间当"备用内存",虽然速度不如真内存快,但能救命。

这篇文章教你在Ubuntu/Debian系统上快速添加Swap分区。

准备工作

  • 一台Linux VPS(推荐Ubuntu 20.04或Debian 11+)
  • root权限或sudo权限
  • 磁盘剩余空间至少等于你想创建的Swap大小
  • SSH终端连接

步骤

第一步:检查当前Swap状态

先看看系统现在有没有Swap:

free -h

输出类似这样:

              total        used        free      shared  buff/cache   available
Mem:           1.9G        1.5G        200M         50M        200M        300M
Swap:            0B          0B          0B

如果Swap那行全是0,说明没开Swap。

也可以用这个命令查看:

swapon --show

没有输出的话就是没开。

第二步:创建Swap文件

这里创建一个2GB的Swap文件,够用就行。如果内存很小(比如512MB),可以建4GB;内存较大(4GB以上),2GB就够了。

sudo fallocate -l 2G /swapfile

如果提示"fallocate failed: Operation not supported",用这个代替:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

第三步:设置权限

Swap文件权限必须严格限制,否则系统会拒绝使用:

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

三行命令,分别做三件事:设权限、格式化为Swap、启用Swap。

再跑一次free -h确认生效:

              total        used        free      shared  buff/cache   available
Mem:           1.9G        1.5G        200M         50M        200M        300M
Swap:          2.0G          0B        2.0G

Swap行显示2GB,成了。

第四步:开机自动挂载

上面操作重启后就没了。要让Swap永久生效,改一下fstab:

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

第五步:调整Swappiness值

Swappiness控制系统用Swap的积极性,范围0-100。值越大越爱用Swap。

默认通常是60,对于SSD磁盘的VPS,建议调到10-30之间:

# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改为10
sudo sysctl vm.swappiness=10

# 永久修改,写入配置文件
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

值设得小一点,系统会优先用物理内存,实在不够了才切到Swap。

验证

全部做完后,跑这几个命令确认一切正常:

# 确认Swap已启用
free -h

# 确认开机自动挂载
grep swapfile /etc/fstab

# 确认swappiness值
sysctl vm.swappiness

三个都没问题,Swap就搞定了。

常见问题

Swap会影响性能吗?

会。磁盘速度比内存慢几百倍。Swap只是应急方案,别指望靠它跑重型任务。但对付内存溢出、偶尔的流量高峰完全够用。

Swap文件多大合适?

  • 内存≤1GB:Swap设为内存的2倍
  • 内存1-4GB:Swap设为与内存相等
  • 内存>4GB:Swap 2-4GB足够

能用Swap替代加内存吗?

不能。Swap是救急的,不是长久之计。如果你的程序经常吃满内存,该升级还是得升级。

Swap放在哪?

默认放在根目录下。如果你有多块磁盘,可以放在更快的SSD上,但大多数VPS只有一块盘,不用折腾。

删除Swap怎么操作?

sudo swapoff /swapfile
sudo rm /swapfile
# 同时从fstab里删掉对应行
sudo nano /etc/fstab

Swap这招简单粗暴,但确实能帮你省下不少事。尤其是那些内存小的入门级VPS,开了Swap之后跑Docker、编译项目都不容易崩了。

你的VPS内存多大?有没有被OOM折磨过?

这篇文章对你有帮助吗?