Linux 救急指南——用文件当 Swap,内存不够也不怕

本文转载自 灵感小屋 - 🐧 Linux 救急指南:用文件当 Swap,内存不够也不怕!,版权归原作者所有。

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

为什么需要 Swap?

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

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

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

实战:5 分钟创建文件 Swap

1️⃣ 创建 Swap 文件

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

1
2
3
4
5
# 创建一个 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 读写,否则系统会拒绝挂载:

1
sudo chmod 600 /swapfile

3️⃣ 格式化为 Swap 格式

1
sudo mkswap /swapfile

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

4️⃣ 立即启用

1
sudo swapon /swapfile

验证一下:

1
2
3
sudo swapon --show
# 或
free -h

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

关键一步:开机自动挂载

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

1
sudo nano /etc/fstab

在文件末尾添加一行:

1
/swapfile none swap sw 0 0

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

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

1
2
sudo mount -a
sudo swapon -a

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

进阶调优:Swappiness

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

你可以根据场景调整:

1
2
3
4
5
# 临时调整(重启失效)
sudo sysctl vm.swappiness=10

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

需要清理?一键卸载

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

1
2
3
4
5
6
7
8
# 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 文件顶上!💪


来源:https://www.tianlingzi.top/archives/263/