虛擬記憶體 (Swap) 打破物理 RAM 限制,同時隔離進程地址空間提供安全邊界。RAM 耗盡 → 系統變慢 (可忍受);Swap 耗盡 → 進程無法 fork、OOM Killer 殺進程、服務掛起甚至死鎖 (不可接受)。 Java/JVM、Oracle 數據庫等企業級應用對 Swap 需求極大,常要求 Swap ≥ 2×RAM。安裝時低估需求怎麼辦?本文提供兩種無需重裝、業務不中斷的擴容方案。
# fdisk /dev/sdb
n → p → 1 → [回車] → [回車] # 建立主分區佔用全部空間
t → 82 # 修改類型為 Linux swap (代碼 82)
w # 寫入分區表
建議:若預留擴展空間,先建「擴展分區」再在其上建「邏輯分區」,利於後續無損擴容。
mkswap /dev/sdb1
swapon /dev/sdb1 # 立即生效
echo '/dev/sdb1 none swap sw 0 0' >> /etc/fstab # 永久生效
驗證:swapon -s 或 free -h 確認總 Swap 容量已增加。
作者實戰案例:文件伺服器上線後需部署 Oracle,原 Swap 不足,無法重裝,採用此法解決。
# 建立 4GB Swap 文件 (視可用空間而定)
dd if=/dev/zero of=/home/swapfile bs=1M count=4096 status=progress
# 或使用 fallocate (瞬間完成,支援 ext4/xfs/btrfs)
fallocate -l 4G /home/swapfile
chmod 600 /home/swapfile # 僅 root 可讀寫,安全強制要求
mkswap /home/swapfile
swapon /home/swapfile
echo '/home/swapfile none swap sw 0 0' >> /etc/fstab
| 維度 | Swap 分區 | Swap 文件 |
|---|---|---|
| 性能 | 略優 (無文件系統層開銷) | 現代內核 (2.6+) 差異可忽略 |
| 靈活性 | 需分區操作、風險較高 | 隨建隨刪、可動態調整大小 |
| 適用場景 | 新增硬盤、重新規劃磁盤佈局 | 緊急擴容、雲主機、無分區剩餘空間 |
| 休眠支援 | 完美支援 | 需額外配置 resume offset,較麻煩 |
控制核心傾向於換出匿名頁還是文件頁:
sysctl vm.swappiness=10 # 臨時生效 (值 0-100,越小越不願用 Swap)
echo 'vm.swappiness=10' >> /etc/sysctl.conf # 永久生效
Swap 不足不是死刑。**新增分區** 適合規劃階段;**Swap 文件** 是救急神器。配合 vm.swappiness 調優,讓有限記憶體發揮最大效能。下次 Oracle 安裝報錯「Swap space insufficient」,你已知從容應對。