SWAP 空間不足會導致 OOM Killer 觸發、系統卡頓甚至服務崩潰。本文提供兩種擴容方案:分區法(永久、性能最優)與 文件法(靈活、無需重分區),並詳細說明持久化配置與驗證步驟。
# 創建 2G Swap 文件(bs=1M count=2048) dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress # 或使用 fallocate(瞬間創建,稀疏文件,部分文件系統不支持) fallocate -l 2G /swapfile
chmod 600 /swapfile # 必須 600,否則 swapon 警告 mkswap /swapfile # 寫入 Swap 簽名
swapon /swapfile # 立即生效 swapon --show # 驗證 # NAME TYPE SIZE USED PRIO # /swapfile file 2G 0B -2
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# 臨時 echo 10 > /proc/sys/vm/swappiness # 永久 echo 'vm.swappiness=10' >> /etc/sysctl.conf sysctl -p
swappiness=10 表示內存佔用 90% 以上才積極使用 Swap,適合內存充足的服務器;桌面環境建議 60。
fdisk /dev/sda n # 新建分區 p # 主分區 # 選擇分區號、起止柱面 t # 修改類型 82 # Linux swap (0x82) w # 寫入
partprobe /dev/sda mkswap /dev/sdaX # X 為新分區號
swapon /dev/sdaX echo '/dev/sdaX none swap sw 0 0' >> /etc/fstab
free -h # total used free shared buff/cache available # Mem: 7.7G 2.1G 4.5G 120M 1.1G 5.2G # Swap: 2.0G 0 2.0G swapon -s # Filename Type Size Used Priority # /swapfile file 2097148 0 -2 # /dev/sda3 part 4194300 0 -1
swapoff /swapfile sed -i '/\/swapfile/d' /etc/fstab rm -f /swapfile
| 坑點 | 後果 | 規避 |
|---|---|---|
| 文件權限非 600 | swapon 警告「insecure permissions」 | chmod 600 強制執行 |
| fallocate 創建的稀疏文件在 Btrfs/ZFS 上無效 | 實際佔用空間為 0,Swap 不工作 | 統一用 dd 或確認文件系統支持 |
| fstab 寫錯設備路徑 | 開機進入 emergency 模式 | blkid 核對 UUID,推薦用 UUID=xxx 掛載 |
| 多 Swap 優先級未設置 | 內核輪詢使用,SSD/HDD 混用性能抖動 | swapon -p 10 /dev/nvme0n1p3 設置高優先級(-1 最高) |
文件法適合「快速止血、雲盤不可分區」,分區法適合「長期穩定、追求極致 IO」。無論哪種,寫入 fstab、設置 swappiness、監控 Swap 使用率 三步不可少。