服务器内存告警?程序被 OOM Killer 无情杀掉?别急,不用重启、不用重新分区,一个文件就能搞定 Swap 扩容


为什么需要 Swap?

Swap(交换空间)是 Linux 的"虚拟内存"。当物理内存吃紧时,内核会把不活跃的内存页挪到磁盘上,给活跃进程腾地方。

虽然磁盘比内存慢得多,但有 Swap 兜底,至少能:

  • ✅ 避免进程被 OOM Killer 强制杀死
  • ✅ 让内存密集型任务(如编译、数据分析)顺利跑完
  • ✅ 为系统争取时间,等你扩容物理内存

实战:5 分钟创建文件 Swap

1️⃣ 创建 Swap 文件

推荐用 fallocate(瞬间完成),如果文件系统不支持再换 dd

# 创建一个 4GB 的 swap 文件(按需调整 4G 这个值)
sudo fallocate -l 4G /swapfile

# 如果 fallocate 报错,用 dd 兜底(稍慢但兼容所有文件系统)
# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

2️⃣ 设置安全权限

Swap 文件必须只能 root 读写,否则系统会拒绝挂载:

sudo chmod 600 /swapfile

3️⃣ 格式化为 Swap 格式

sudo mkswap /swapfile

看到类似 Setting up swapspace version 1, size = 4 GiB 就是成功了。

4️⃣ 立即启用

sudo swapon /swapfile

验证一下:

sudo swapon --show
# 或
free -h

如果看到 /swapfile 出现在列表里,🎉 恭喜你,Swap 已经在线了!


关键一步:开机自动挂载

刚才的操作重启后会失效,要写入 /etc/fstab

sudo nano /etc/fstab

在文件末尾添加一行:

/swapfile none swap sw 0 0

⚠️ 千万别乱改已有的行! 改错可能导致系统无法启动。

保存后,先测试语法是否正确:

sudo mount -a
sudo swapon -a

没报错就说明配置安全,下次重启会自动挂载。


进阶调优:Swappiness

Linux 默认的 swappiness 通常是 60,表示内核比较"积极"地使用 Swap。

你可以根据场景调整:

# 临时调整(重启失效)
sudo sysctl vm.swappiness=10

# 永久生效
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
适用场景
10-20桌面/笔记本,优先保内存,减少卡顿感
60默认,平衡策略
100服务器后台任务,优先保内存给缓存

需要清理?一键卸载

如果以后不需要了,按这个顺序清理:

# 1. 关闭 swap
sudo swapoff /swapfile

# 2. 编辑 fstab,删除 /swapfile 那一行
sudo nano /etc/fstab

# 3. 删除文件
sudo rm /swapfile

干净利落,不留痕迹。


⚠️ 避坑提醒

解决方案
Btrfs 文件系统旧内核不支持 swap 文件,建议改用 swap 分区或 zram
SSD 寿命焦虑频繁 Swap 确实会写盘,内存充足时建议降低 swappiness
Swap 大小≤2GB 内存建议 2×RAM;2-8GB 建议 1×RAM;>8GB 建议 4-8GB 即可

总结

用文件做 Swap 是 Linux 最灵活的内存扩容方案:无需重启、无需分区、随时增减。无论是云服务器临时救急,还是本地开发机编译大项目,都能派上大用场。

下次再看到 Out of memory,别再只会加内存条了,先 fallocate 一个 Swap 文件顶上!💪


你平时是怎么处理 Linux 内存不足的? 欢迎在评论区交流 👇

最后修改:2026 年 04 月 30 日
如果觉得我的文章对你有用,请随意赞赏