Linux swap 分割區的設定與優化
在 Linux 系統管理中,Swap(交換空間)扮演著記憶體溢位時的緩衝角色。當實體記憶體(RAM)耗盡時,核心會將不活躍的頁面移至 Swap 空間,以維持系統的穩定性。對於伺服器或桌面環境而言,正確配置 Swap 不僅能防止因記憶體不足導致的程式崩潰(OOM Killer),還能優化整體效能。本文將以 Ubuntu 22.04 與 Debian 12 為基礎,介紹如何檢查、建立及優化 Swap 設定。
檢查目前的 Swap 狀態
在進行任何變更之前,首先確認系統目前的 Swap 狀況。使用 free 指令可以清楚看到記憶體與 Swap 的使用量:
free -h
輸出結果中,請留意 Swap 欄位下的 Total、Used 與 Free。若 Total 為 0,代表系統尚未配置任何 Swap 空間。此外,你也可以使用 swapon --show 來查看目前啟用的 Swap 檔案或分割區:
swapon --show
若無輸出,則表示目前沒有啟用 Swap。
建立 Swap 檔案
雖然在安裝作業系統時可以建立獨立的 Swap 分割區,但在雲端環境或已經部署好的系統中,使用 Swap 檔案(Swap File)更為靈活且方便。我們將在根目錄下建立一個 2GB 的 Swap 檔案。
請根據您的需求調整 bs(區塊大小)與 count(區塊數量)的乘積。以下範例建立 2GB 的 Swap:
sudo fallocate -l 2G /swapfile
若您的檔案系統不支援 fallocate(例如某些舊版 ext4 或 Btrfs),請改用 dd 指令:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
設定權限並啟用 Swap
建立檔案後,必須嚴格限制其權限,僅允許 root 存取,以確保安全。接著,將其格式化為 Swap 格式並啟用。
# 設定權限為 600
sudo chmod 600 /swapfile
# 設定檔案格式為 swap
sudo mkswap /swapfile
# 啟用 Swap
sudo swapon /swapfile
此時,再次執行 free -h 或 swapon --show,您應該能看到新的 Swap 空間已生效。
設定開機自動掛載
目前啟用的 Swap 僅在當前執行階段有效,重新開機後會消失。為了讓設定持久化,需要修改 /etc/fstab 檔案。
請在終端機中執行以下指令,將 Swap 檔案路徑與參數寫入 fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
這行指令會將 /swapfile none swap sw 0 0 追加到 /etc/fstab 末尾,確保系統開機時自動啟用該 Swap 檔案。
Swap 效能優化:調整 Swappiness
Linux 核心透過 vm.swappiness 參數來控制將記憶體頁面移至 Swap 的積極程度。其數值範圍為 0 到 100。
- 數值越高(接近 100):核心會更積極地將記憶體資料移至 Swap,以釋放實體記憶體。這適合記憶體充足的桌面環境,但可能增加磁碟 I/O 負擔。
- 數值越低(接近 0):核心傾向於保留資料在實體記憶體中,僅在記憶體幾乎耗盡時才使用 Swap。這適合伺服器環境,能降低延遲並提升回應速度。
預設值通常為 60。您可以查看當前設定:
cat /proc/sys/vm/swappiness
若要臨時調整為 10(推薦用於伺服器),請執行:
sudo sysctl vm.swappiness=10
若要永久生效,請編輯 /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
在檔案末尾加入以下行:
vm.swappiness=10
儲存後,重新啟動系統或執行 sudo sysctl -p 使設定生效。
常見問題與解決
-
Swap 空間使用率過高 如果 Swap 使用率長期居高不下,通常意味著實體記憶體嚴重不足。這可能是應用程式記憶體洩漏或配置不當所致。建議優先檢查記憶體消耗最高的程式(使用
htop或top),並考慮增加 RAM 或優化應用程式,而非單純擴大 Swap。過度依賴 Swap 會導致系統效能顯著下降(Thrashing)。 -
Swap 檔案建立失敗 若在執行
fallocate時遇到 "Operation not supported" 錯誤,請改用dd指令建立檔案。另外,請確保目標目錄有足夠的空間,且檔案系統支援交換空間。在 Btrfs 檔案系統上,可能需要特殊處理或使用fallocate的替代方案。
小結
正確配置 Swap 是 Linux 系統穩定性的關鍵一環。透過建立 Swap 檔案並調整 vm.swappiness,您可以根據工作負載需求平衡記憶體與磁碟的使用。對於伺服器環境,建議將 Swappiness 設為較低值以減少 I/O 延遲;對於桌面環境,則可維持預設值以提供更好的多工體驗。記住,Swap 是最後的防線,充足的實體記憶體始終是提升效能的最佳途徑。