Linux Swap 置換空間設定
Swap (置換空間) 是 Linux 系統中的一種虛擬記憶體技術。 當實體記憶體 (RAM) 快要用完時,系統會把一部分比較少用到的資料,暫時寫入硬碟中的 Swap 區塊,藉此騰出 RAM 給更重要的程式使用。
雖然硬碟速度遠比 RAM 慢,但 Swap 可以避免系統因為 OOM (Out of Memory) 而直接讓程式崩潰。
檢查目前的 Swap
使用 free -h 或 swapon --show 查看。
# 查看記憶體與 Swap 使用量
free -h
# 查看 Swap 詳細資訊 (如果有設定的話)
swapon --show
如果 swapon 沒輸出,或 free 的 Swap 欄位是 0,代表目前沒有設定 Swap。
建立 Swap File
早期 Linux 習慣切一個獨立的 Partition 當 Swap,但現在更流行直接建立一個 Swap File,彈性更高(想改大小隨時可以改)。
以下示範如何在 Ubuntu/Debian 上建立一個 2GB 的 Swap File。
1. 建立空檔案
使用 fallocate 快速配置空間 (或是用 dd)。
sudo fallocate -l 2G /swapfile
2. 設定權限
基於安全考量,Swap 檔案只能讓 root 讀寫。
sudo chmod 600 /swapfile
3. 格式化為 Swap 格式
把這個檔案標記為 Swap 空間。
sudo mkswap /swapfile
4. 啟用 Swap
告訴系統現在開始使用這個檔案。
sudo swapon /swapfile
這時候再打 free -h 應該就可以看到 Swap 總量增加了。
5. 設定開機自動掛載
目前的設定重開機後就會消失。要永久生效,必須寫入 /etc/fstab。
# 先備份一下 fstab (好習慣)
sudo cp /etc/fstab /etc/fstab.bak
# 將設定寫入最後一行
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
調整 Swappiness (使用傾向)
Swappiness 是一個 0 到 100 的數值,用來控制系統「有多愛用 Swap」。
- 0:盡量不使用 Swap,除非 RAM 真的炸了。
- 100:非常積極地使用 Swap,稍微有點閒置就丟進去。
- 預設值:通常是 60。
對於伺服器(尤其是跑資料庫),我們通常希望盡量用 RAM,避免硬碟 I/O 拖慢效能。建議將值調低(例如 10)。
查看當前數值
cat /proc/sys/vm/swappiness
臨時修改 (重開機失效)
sudo sysctl vm.swappiness=10
永久修改
編輯 /etc/sysctl.conf,在最後面加上:
vm.swappiness=10
存檔後,該設定會在下次開機時自動生效。 如果你不想重開機,可以執行以下指令讓它立刻生效:
sudo sysctl -p
關閉與刪除 Swap
如果你不需要 Swap 了,或者想調整大小:
# 1. 關閉 Swap (這步可能會跑很久,因為要先把資料搬回 RAM)
sudo swapoff /swapfile
# 2. 刪除檔案
sudo rm /swapfile
# 3. 記得去 /etc/fstab 把那一行刪掉,不然開機會報錯!
sudo nano /etc/fstab