Linux SWAP 啟用與禁用策略實戰指南(含配置優化建議)
今天分享一下SWAP交換分區。
1. 什么是 SWAP?
在 Linux 系統中,SWAP(交換空間)是物理內存(RAM)的一個補充區域,當物理內存(RAM)不足時,系統會將一些不活躍的數據轉移到 SWAP(磁盤空間),以釋放內存供活躍進程使用。SWAP 既可以是一個獨立的分區,也可以是一個普通文件。
雖然 SWAP 的訪問速度遠低于 RAM,但它能防止系統因內存耗盡而崩潰。
查看交換分區:
free -h
進一步查看當前 SWAP 文件/分區:
swapon --show
2. 如何禁用 SWAP
在某些場景下(如高性能數據庫、Docker 容器環境、Kubernetes 節點),禁用 SWAP 可以提高性能與系統可預測性。
(1) 臨時禁用 SWAP
這種方式重啟后會失效。
swapoff -a
(2) 永久禁用 SWAP
# 注釋掉包含swap的行
sed -ri 's/.*swap.*/#&/' /etc/fstab
驗證是否關閉:
free -h
從圖片可以看到,swap分區已經被禁用了,目前沒有容量。
3. 如何啟用 SWAP
如果你是在低配機器或內存容易吃緊的環境中,啟用 SWAP 是非常必要的。
(1) 啟用SWAP 分區或文件
swapon -a
(2) 創建新的 SWAP 文件
使用 dd 創建 2G SWAP 文件:
dd if=/dev/zero of=/swapfile bs=1M count=2048
設置權限:
chmod 600 /swapfile
格式化為 SWAP:
mkswap /swapfile
啟用 SWAP:
swapon /swapfile
添加到 /etc/fstab 實現永久掛載:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4. 優化策略
主要是調整 Swappiness 值,swappiness 是一個內核參數,用于控制系統何時使用 SWAP。
- 值范圍:0 ~ 100
- 值越小 → 越少使用 SWAP(更偏重使用 RAM)
- 默認值為 60,通常建議設置為 10~20
(1) 查看當前值
cat /proc/sys/vm/swappiness
(2) 臨時設置(重啟失效)
sysctl vm.swappiness=10
(3) 永久設置
編輯配置文件:
vi /etc/sysctl.conf
添加或修改這一行:
vm.swappiness=10
保存并執行:
sysctl -p
5. 實際場景建議
場景 | 建議策略 | 說明 |
高性能數據庫服務器 | 禁用 SWAP 或 swappiness=1 | 防止數據庫因為內存交換而性能下降 |
Docker / Kubernetes 節點 | 禁用 SWAP(K8s 要求) | 容器環境對內存調度更敏感 |
桌面系統(8GB+) | swappiness=10 | 避免 SWAP 影響系統響應速度 |
輕量 VPS(1~2G RAM) | 啟用 SWAP,swappiness=20~30 | 防止內存溢出崩潰 |
游戲/圖形工作站 | 啟用 SWAP,但盡量減少使用 | 某些 GPU 程序會觸發內存高占用 |
6. 常見問題與建議
(1) SWAP 會損傷 SSD 嗎?
頻繁寫入確實會影響 SSD 壽命,但現代 SSD 壽命普遍較長,實際影響較小。如果擔心,可以設置較低的 swappiness,減少 SWAP 觸發頻率。
(2) 關閉 SWAP 會讓系統更快嗎?
不一定。系統可能因此頻繁觸發 OOM Killer 殺掉進程。高 RAM 機器(>8G)受益明顯,小內存機器則風險大。