概述
很多小伙伴买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折磨过?