【Linux】swap相關
從你貼的 top 看起來 Swap 使用率偏高(KiB Swap: 79.8/1044476 很像是 79.8% / 1,044,476 KiB),要「釋放 swap」本質上就是把已經換到 swap 的頁面搬回 RAM。最直接的方法是 swapoff → swapon(會短暫吃 RAM、可能卡頓一下)。
1) 先確認 RAM 夠不夠(很重要)
free -h
swapon --show
看 available(可用記憶體)要 大於目前 swap 已用量(最好再多留一些 buffer),不然 swapoff 可能 OOM 或把機器拖很慢。
2) 一次清空 swap(常用)
sudo swapoff -a
sudo swapon -a
清完再確認:
free -h
swapon --show
若你是 swapfile(例如
/swap.img或/swapfile),也可只針對單一檔案:
sudo swapoff /swap.img # 或 /swapfile
sudo swapon /swap.img
3) 找出「誰在吃 swap」(不然很快又會回來)
有 smem 最方便
sudo apt-get update && sudo apt-get install -y smem
sudo smem -rs swap | head
沒有 smem:用 /proc 快速抓(由大到小)
# who_use_swap.sh
#!/bin/bash
for p in /proc/[0-9]*; do
pid=${p##*/}
swap=$(awk '/VmSwap:/ {print $2}' $p/status 2>/dev/null)
comm=$(tr -d '\0' < $p/comm 2>/dev/null)
if [ -n "$swap" ] && [ "$swap" -gt 0 ]; then
printf "%10s KiB pid=%s %s\n" "$swap" "$pid" "$comm"
fi
done | sort -nr | head -20
4) 降低未來再大量使用 swap(可選)
sudo sysctl -w vm.swappiness=10
要永久生效:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
⚠️ 小提醒:swapoff 期間會把資料搬回 RAM,可能造成短暫卡頓/IO 增加;如果是線上服務,建議離峰做,或先找出吃 swap 的程序再處理。
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 45G 25G 1.8G 226M 18G 20G
Swap: 1.0G 814M 205M
[root@localhost ~]# swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 1020M 814.2M -2
swapoff 如何觀察?
用 watch 最方便:
watch -n 5 free -h
想加上時間戳一起看:
watch -n 5 'date; echo; free -h'
離開按 q(或 Ctrl+C)。
什麼情況才需要「清快取」?
以下有需要放快取,獲得記憶體空間嗎
Every 5.0s: date; echo; free -h
Thu Dec 18 10:23:47 2025
Thu Dec 18 10:23:47 CST 2025
total used free shared buff/cache available
Mem: 45G 25G 994M 230M 18G 19G
Swap: 1.0G 0B 1.0G
你現在重點要看的是:
-
available = 19G:代表系統評估「真的能拿來給程式用」的記憶體還有 19G(包含可回收的 cache)。這個數字大 → 不缺記憶體。 -
buff/cache = 18G:這是 Linux 用來加速 I/O 的檔案快取,需要時會自動回收,不是浪費。 -
free = 1.5G很低是正常現象,Linux 會盡量把閒置 RAM 拿去當 cache。
所以:沒有必要清 cache,清了反而會讓磁碟/檔案讀取變慢(cache 被你清掉了)。
説明 /dev/dm-1 意義 , 與 -a 哪裡不同
sudo swapoff /dev/dm-1
sudo swapon /dev/dm-1
好,先用你現在看到的資訊來對照講:
/dev/dm-1 是什麼意思?
-
dm= device-mapper(Linux 的「裝置映射」層) -
/dev/dm-1代表「第 2 個 device-mapper 裝置」(編號從 0 開始),通常是:-
LVM logical volume(最常見,例如
centos-swap) -
或 dm-crypt / multipath 這類透過 device-mapper 建出來的裝置
-
-
因為你
swapon --show顯示它是TYPE partition,表示它是一個「區塊裝置/分割區型態」拿來當 swap。
想看它真正對應到什麼名字(建議你查一下):
ls -l /dev/dm-1
lsblk -f
sudo dmsetup info -C
sudo dmsetup ls --tree
通常你會看到像 centos-swap 或 vgname-swap 之類的 LV 名稱。
swapoff /dev/dm-1 / swapon /dev/dm-1 在做什麼?
-
swapoff /dev/dm-1:只停用這個 swap 裝置,把它上面的 swap 頁面搬回 RAM -
swapon /dev/dm-1:再把它啟用回來(等於「清空」效果)
-a 跟指定 /dev/dm-1 有什麼不同?
1) 作用範圍不同
-
swapoff /dev/dm-1:只針對這一個 swap -
swapoff -a:針對所有已啟用的 swap(全部停用) -
swapon -a:把/etc/fstab裡標記為 swap 的項目 全部啟用回來
2) 安全性/可控性不同
-
如果你機器上只有一個 swap(你現在看起來是),兩者結果幾乎一樣。
-
如果你有多個 swap(例如:一個 swap 分割區 + 一個 swapfile),用
-a會一次動到全部;指定裝置比較可控,避免不小心把你不想動的 swap 也關掉。
3) -a 依賴 /etc/fstab
-
swapon -a會依照/etc/fstab去開啟 swap -
若某個 swap 沒寫在 fstab、或用系統/雲平台動態掛的,
-a可能不會把它開回來;指定/dev/dm-1就不受這個影響。
你這台怎麼選?
你現在 swapon --show 只有一個 /dev/dm-1,所以:
-
想精準可控:用你貼的這兩行 ✅
-
想一鍵通用:
swapoff -a; swapon -a也可以 ✅
