1. 查看Swap及內存使用情況
首先確認Swap空間的使用狀態和內存占用情況,明確清理方向。常用命令:
free -h
:直觀顯示內存、Swap的總大小、已用空間及剩余空間;swapon --show
:列出所有啟用的Swap分區/文件及其大小、優先級;top
(按f
鍵添加SWAP
列)或ps aux --sort=-%mem | head
:找出占用Swap最多的進程。2. 臨時釋放Swap空間(快速緩解壓力)
若需立即釋放Swap,可通過“關閉-重新啟用”Swap的方式,將Swap中的數據換回內存(需確保物理內存充足,否則可能導致OOM)。具體步驟:
sudo swapoff -a
(此命令會終止所有使用Swap的進程,建議在業務低峰期操作);sudo swapon -a
(恢復Swap啟用狀態);free -h
查看Swap使用量是否歸零。3. 調整Swappiness參數(減少Swap使用傾向)
vm.swappiness
參數控制內核使用Swap的積極性(默認值60,范圍0-100)。降低該值可讓系統更傾向于使用物理內存,減少Swap占用。操作方法:
sudo sysctl vm.swappiness=10
(例如設置為10,表示內存使用率達90%時才啟用Swap);vm.swappiness=10
添加到/etc/sysctl.conf
文件末尾,執行sudo sysctl -p
使配置生效。4. 清理內存緩存(釋放物理內存,間接減少Swap使用)
Linux系統會利用空閑內存作為緩存(如頁面緩存、dentries/inodes緩存),可通過清理緩存釋放物理內存,降低Swap使用概率。命令:
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
sync
:將緩存數據同步到磁盤,避免數據丟失;echo 3
:清理頁面緩存、目錄項緩存和inode緩存(echo 1
僅清理inode,echo 2
僅清理頁面緩存)。5. 終止占用Swap的高內存進程(解決根源問題)
若某進程長期占用大量Swap,需定位并終止該進程(謹慎操作,避免影響核心服務)。步驟:
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3} END{ print ""}' $file;
done | sort -k 2 -n -r | head -n 5
該命令會列出Swap使用量前5的進程(顯示進程名和Swap用量);sudo kill -9 <PID>
(-9
表示強制終止)。6. 擴展Swap空間(長期解決方案)
若物理內存不足且頻繁出現Swap滿的情況,需擴展Swap空間(優先選擇Swap文件,操作更靈活)。常見方法:
sudo fallocate -l 2G /swapfile # 創建2GB空文件
sudo chmod 600 /swapfile # 設置僅root可讀寫
sudo mkswap /swapfile # 格式化為Swap格式
sudo swapon /swapfile # 啟用Swap文件
/swapfile none swap sw 0 0
添加到/etc/fstab
文件中(重啟后自動啟用);lvextend
擴展邏輯卷,再用mkswap
重新格式化;若為物理分區,需使用fdisk
/parted
調整分區大小,操作較復雜。注意事項
/etc/fstab
或調整分區時;free -h
查看available
內存),否則可能導致系統崩潰;