前言

今天早上突然发现我的VPS虚拟内存也快要爆满了,突然想到我的硬盘空间很大,何不把Swap迁移到磁盘中以解燃眉之急。

这种做法虽然不明智,但出于自己捉襟见肘,也只能出此下策。最佳解决方案是升级你的VPS配置

以下是针对 Linux 系统虚拟内存(Swap)快爆满迁移到磁盘的最佳解决方案,按优先级排序

紧急释放内存(立即生效)

‌终止高内存进程‌

top  # 按 M 按内存占用排序,记录占用超 1GB 的 PID
kill -9 <PID>  # 结束非关键进程(如异常 Java/Python 进程)

‌清空缓存页‌

sync; echo 3 > /proc/sys/vm/drop_caches  # 释放 PageCache/dentries/inodes

🔧 ‌迁移前准备‌

确认磁盘空间‌

df -h  # 确认目标磁盘(如 /mnt/ssd)剩余空间 ≥ 所需 Swap 大小

‌备份关键数据‌

sudo cp /etc/fstab /etc/fstab.bak  # 备份配置文件防止操作失误

⚙️ ‌创建新 Swap 文件/分区‌

▸ ‌方案A:Swap 文件(推荐 SSD)‌

sudo fallocate -l 8G /mnt/ssd/swapfile  # 在 SSD 创建 8GB 文件(比 dd 更快)  
sudo chmod 600 /mnt/ssd/swapfile        # 设置权限防篡改  
sudo mkswap /mnt/ssd/swapfile           # 格式化为 Swap 分区  

▸ ‌方案B:独立 Swap 分区(需未分配空间)‌

sudo fdisk /dev/sdb              # 对新磁盘分区(如 sdb)  
# 创建新分区 → 类型改为 "Linux Swap"   
sudo mkswap /dev/sdb1            # 格式化新分区

⚡ ‌迁移并激活新 Swap‌

‌停用旧 Swap‌

sudo swapoff -a                # 关闭所有 Swap 空间(确保内存充足时操作)

‌启用新 Swap‌

sudo swapon /mnt/ssd/swapfile  # 激活文件方式  
# 或  
sudo swapon /dev/sdb1          # 激活分区方式 

‌验证状态‌

sudo swapon --show             # 检查新 Swap 是否生效  
free -h                        # 确认总 Swap 容量更新

🔄 ‌永久生效配置‌

‌更新 /etc/fstab‌

echo '/mnt/ssd/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab  # 文件方式 
# 或  
echo '/dev/sdb1 none swap sw 0 0' | sudo tee -a /etc/fstab          # 分区方式 

删除旧 Swap 项‌

手动编辑 /etc/fstab,注释或删除原 Swap 行(如 /dev/sda2 相关条目)

⚠️ ‌迁移后优化与注意事项‌

‌调整 Swappiness‌

sudo sysctl vm.swappiness=10   # 降低 Swap 使用倾向(物理内存充足时)  
# 永久生效:在 /etc/sysctl.conf 添加 vm.swappiness=10

释放磁盘与内存资源

  • ‌清理大文件与日志‌

sudo du -sh /* | sort -rh | head -n 10  # 查找占用 >1GB 的目录
sudo journalctl --vacuum-size=200M  # 清理 systemd 日志(保留 200MB)
  • ‌禁用非必要服务‌

systemctl list-unit-files | grep enabled  # 列出启用的服务
sudo systemctl disable <service>  # 停用内存占用高的服务(如 docker/mysql 测试实例)‌

进阶调优(长效防护)

  • ‌启用内存压缩(KSM)‌

sudo echo 1 > /sys/kernel/mm/ksm/run  # 合并相同内存页,减少 Swap 压力
  • ‌限制进程内存‌

systemd-run --scope -p MemoryMax=2G ./your_app  # 强制进程内存不超过 2GB
  • ‌物理内存扩容‌

  1. 若 free -m 显示物理内存持续 >80% 使用率,需增加内存条1

  2. 虚拟机用户:通过 Hypervisor 扩展虚拟内存(VMware/VirtualBox 支持在线扩容)

‌恶意进程检测‌

ps aux --sort=-%mem | head -n 5  # 检查内存占用 Top5 进程名是否可疑

‌性能关键点‌

  • ‌优先选 SSD‌:机械硬盘上的 Swap 会严重拖慢系统

  • ‌独立分区 > 文件‌:直接访问磁盘比经文件系统层更快

‌安全提示‌

  • 操作前确保系统无高负载任务,避免 swapoff 时内存溢出崩溃

  • 虚拟机用户:可在 Hypervisor 层直接扩展虚拟磁盘后再操作

  • Swap 禁用风险‌:仅推荐物理内存 >64GB 且无内存泄漏的系统,普通服务器禁用 Swap 可能导致 OOM 崩溃5

完成迁移后,定期用 htop 或 vmstat 2 监控 Swap 使用趋势。若物理内存长期 >80%,仍需考虑扩容内存条。

通过以上优化,Swap 使用率可显著降低。长期建议每月检查 journalctl 日志及 /var/log 目录,预防存储泄漏问题。高并发场景需结合网络参数调优(如 TCP 缓冲区设置)