Linux swap 分割區的設定與優化 文章首圖

Linux swap 分割區的設定與優化

Linux swap 分割區的設定與優化

在 Linux 系統管理中,Swap(交換空間)扮演著記憶體溢位時的緩衝角色。當實體記憶體(RAM)耗盡時,核心會將不活躍的頁面移至 Swap 空間,以維持系統的穩定性。對於伺服器或桌面環境而言,正確配置 Swap 不僅能防止因記憶體不足導致的程式崩潰(OOM Killer),還能優化整體效能。本文將以 Ubuntu 22.04 與 Debian 12 為基礎,介紹如何檢查、建立及優化 Swap 設定。

檢查目前的 Swap 狀態

在進行任何變更之前,首先確認系統目前的 Swap 狀況。使用 free 指令可以清楚看到記憶體與 Swap 的使用量:

free -h

輸出結果中,請留意 Swap 欄位下的 TotalUsedFree。若 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 -hswapon --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 使設定生效。

常見問題與解決

  1. Swap 空間使用率過高 如果 Swap 使用率長期居高不下,通常意味著實體記憶體嚴重不足。這可能是應用程式記憶體洩漏或配置不當所致。建議優先檢查記憶體消耗最高的程式(使用 htoptop),並考慮增加 RAM 或優化應用程式,而非單純擴大 Swap。過度依賴 Swap 會導致系統效能顯著下降(Thrashing)。

  2. Swap 檔案建立失敗 若在執行 fallocate 時遇到 "Operation not supported" 錯誤,請改用 dd 指令建立檔案。另外,請確保目標目錄有足夠的空間,且檔案系統支援交換空間。在 Btrfs 檔案系統上,可能需要特殊處理或使用 fallocate 的替代方案。

小結

正確配置 Swap 是 Linux 系統穩定性的關鍵一環。透過建立 Swap 檔案並調整 vm.swappiness,您可以根據工作負載需求平衡記憶體與磁碟的使用。對於伺服器環境,建議將 Swappiness 設為較低值以減少 I/O 延遲;對於桌面環境,則可維持預設值以提供更好的多工體驗。記住,Swap 是最後的防線,充足的實體記憶體始終是提升效能的最佳途徑。