Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 手動清理/刷新 SWAP 分區操作指南

編輯:Linux 教學

當物理內存充足但 SWAP 佔用率較高(>30%)時,可能影響性能。通過 swapoff/swapon 循環可將 SWAP 數據遷回內存並清空交換分區。

核心命令

# 關閉所有 SWAP
swapoff -a

# 啟用所有 SWAP
swapon -a

# 一鍵刷新(關閉後重新啟用)
swapoff -a && swapon -a

適用場景

  • 大內存服務器(≥32GB)SWAP 幾乎不需使用
  • 內存升級後需清理殘留 SWAP 數據
  • 性能調優前建立基準環境
  • 應用重啟前釋放被換出的內存頁

注意事項

  • 內存必須充足:執行前確認 free -h 顯示可用內存 > 當前 SWAP 使用量
  • 業務低峰期操作:刷新過程可能導致短暫 I/O 尖峰
  • 不可逆:若內存不足導致 OOM Killer 觸發,進程會被殺死
  • 永久禁用 SWAP:編輯 /etc/fstab 註釋 SWAP 行,執行 swapoff -a

監控腳本示例

#!/bin/bash
# 當 SWAP 使用率超過 30% 且可用內存 > 2GB 時自動刷新
SWAP_USED=$(free | awk '/Swap/ {print $3}')
SWAP_TOTAL=$(free | awk '/Swap/ {print $2}')
MEM_AVAIL=$(free | awk '/Mem/ {print $7}')

if [ $SWAP_TOTAL -gt 0 ]; then
    USAGE=$((SWAP_USED * 100 / SWAP_TOTAL))
    if [ $USAGE -gt 30 ] && [ $MEM_AVAIL -gt 2097152 ]; then
        echo "$(date): SWAP usage ${USAGE}%, refreshing..." >> /var/log/swap_refresh.log
        swapoff -a && swapon -a
    fi
fi

調整 Swappiness(傾向性)

# 臨時修改 (0-100, 越低越不傾向使用 SWAP)
sysctl vm.swappiness=10

# 永久修改
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

生產服務器建議設置 10-30,數據庫服務器可設 1 或 0(慎用)。

總結

swapoff -a && swapon -a 是清理 SWAP 的標準手段,前提是物理內存充足。配合 vm.swappiness 調優,可讓系統更激進地使用物理內存,減少不必要的換出操作。

Copyright © Windows教程網 All Rights Reserved