服务器内存告警?程序被 OOM Killer 无情杀掉?别急,不用重启、不用重新分区,**一个文件就能搞定 Swap 扩容**。 --- ## 为什么需要 Swap? Swap(交换空间)是 Linux 的"虚拟内存"。当物理内存吃紧时,内核会把不活跃的内存页挪到磁盘上,给活跃进程腾地方。 虽然磁盘比内存慢得多,但有 Swap 兜底,至少能: - ✅ 避免进程被 OOM Killer 强制杀死 - ✅ 让内存密集型任务(如编译、数据分析)顺利跑完 - ✅ 为系统争取时间,等你扩容物理内存 --- ## 实战:5 分钟创建文件 Swap ### 1️⃣ 创建 Swap 文件 推荐用 `fallocate`(瞬间完成),如果文件系统不支持再换 `dd`: ```bash # 创建一个 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 读写,否则系统会拒绝挂载: ```bash sudo chmod 600 /swapfile ``` ### 3️⃣ 格式化为 Swap 格式 ```bash sudo mkswap /swapfile ``` 看到类似 `Setting up swapspace version 1, size = 4 GiB` 就是成功了。 ### 4️⃣ 立即启用 ```bash sudo swapon /swapfile ``` 验证一下: ```bash sudo swapon --show # 或 free -h ``` 如果看到 `/swapfile` 出现在列表里,🎉 恭喜你,Swap 已经在线了! --- ## 关键一步:开机自动挂载 刚才的操作重启后会失效,要写入 `/etc/fstab`: ```bash sudo nano /etc/fstab ``` 在文件**末尾**添加一行: ``` /swapfile none swap sw 0 0 ``` ⚠️ **千万别乱改已有的行!** 改错可能导致系统无法启动。 保存后,先测试语法是否正确: ```bash sudo mount -a sudo swapon -a ``` 没报错就说明配置安全,下次重启会自动挂载。 --- ## 进阶调优:Swappiness Linux 默认的 `swappiness` 通常是 60,表示内核比较"积极"地使用 Swap。 你可以根据场景调整: ```bash # 临时调整(重启失效) sudo sysctl vm.swappiness=10 # 永久生效 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf ``` | 值 | 适用场景 | | --------- | ----------------------------------- | | **10-20** | 桌面/笔记本,优先保内存,减少卡顿感 | | **60** | 默认,平衡策略 | | **100** | 服务器后台任务,优先保内存给缓存 | --- ## 需要清理?一键卸载 如果以后不需要了,按这个顺序清理: ```bash # 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 内存不足的?** 欢迎在评论区交流 👇 Loading... 服务器内存告警?程序被 OOM Killer 无情杀掉?别急,不用重启、不用重新分区,**一个文件就能搞定 Swap 扩容**。 --- ## 为什么需要 Swap? Swap(交换空间)是 Linux 的"虚拟内存"。当物理内存吃紧时,内核会把不活跃的内存页挪到磁盘上,给活跃进程腾地方。 虽然磁盘比内存慢得多,但有 Swap 兜底,至少能: - ✅ 避免进程被 OOM Killer 强制杀死 - ✅ 让内存密集型任务(如编译、数据分析)顺利跑完 - ✅ 为系统争取时间,等你扩容物理内存 --- ## 实战:5 分钟创建文件 Swap ### 1️⃣ 创建 Swap 文件 推荐用 `fallocate`(瞬间完成),如果文件系统不支持再换 `dd`: ```bash # 创建一个 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 读写,否则系统会拒绝挂载: ```bash sudo chmod 600 /swapfile ``` ### 3️⃣ 格式化为 Swap 格式 ```bash sudo mkswap /swapfile ``` 看到类似 `Setting up swapspace version 1, size = 4 GiB` 就是成功了。 ### 4️⃣ 立即启用 ```bash sudo swapon /swapfile ``` 验证一下: ```bash sudo swapon --show # 或 free -h ``` 如果看到 `/swapfile` 出现在列表里,🎉 恭喜你,Swap 已经在线了! --- ## 关键一步:开机自动挂载 刚才的操作重启后会失效,要写入 `/etc/fstab`: ```bash sudo nano /etc/fstab ``` 在文件**末尾**添加一行: ``` /swapfile none swap sw 0 0 ``` ⚠️ **千万别乱改已有的行!** 改错可能导致系统无法启动。 保存后,先测试语法是否正确: ```bash sudo mount -a sudo swapon -a ``` 没报错就说明配置安全,下次重启会自动挂载。 --- ## 进阶调优:Swappiness Linux 默认的 `swappiness` 通常是 60,表示内核比较"积极"地使用 Swap。 你可以根据场景调整: ```bash # 临时调整(重启失效) sudo sysctl vm.swappiness=10 # 永久生效 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf ``` | 值 | 适用场景 | | --------- | ----------------------------------- | | **10-20** | 桌面/笔记本,优先保内存,减少卡顿感 | | **60** | 默认,平衡策略 | | **100** | 服务器后台任务,优先保内存给缓存 | --- ## 需要清理?一键卸载 如果以后不需要了,按这个顺序清理: ```bash # 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 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏