−25%

Windows 年繳方案適用,至 10 月 31 日。 檢視方案

EQVPS
開始使用

如何在 Linux VPS 上新增 swap 檔案

用五條指令建立 swap 檔案,讓它在重新啟動後依然生效,並調整 swappiness;另外說明該加多少 swap,以及什麼時候真正的解決辦法是加記憶體。

小伺服器總是在最糟糕的時候耗盡記憶體:一次 apt upgrade、一次 Docker 建置、深夜的備份。沒有 swap 時,核心的 OOM killer 會挑一個程式殺掉,往往就是您的資料庫。swap 檔案是一條便宜的安全帶,給這些峰值留一條出路。只需要五條指令。

1. 檢視現狀

swapon --show
free -h

如果 swapon --show 什麼都沒輸出,說明還沒有 swap。

2. 建立 swap 檔案

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

chmod 600 很重要:swap 裡可能留有記憶體中任何內容的碎片,包括機密資訊,所以應當只有 root 能讀取。如果 fallocate 報錯 「operation not supported」,就改用 dd:

dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

3. 讓它永久生效

沒有這一步,swap 會在重新啟動後消失:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

4. 調整 swappiness

讓核心優先使用記憶體,主要在吃緊時才用 swap:

echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl --system

5. 驗證

swapon --show
free -h

您應該能看到一個 2 GB 的 swap 裝置,cat /proc/sys/vm/swappiness 應該輸出 10。

該設多大?

  • 1–2 GB 記憶體的伺服器: 1–2 GB swap。
  • 4 GB 或更多: 1–2 GB 作為安全網依然足夠。

不要按「記憶體的兩倍」來設 swap。在伺服器上,swap 是用來吸收短暫峰值的,而不是用來執行記憶體裝不下的負載。

swap 不是答案的時候

觀察它幾天:

vmstat 5

si 和 so 兩列顯示每秒從 swap 讀入和寫出的頁數。偶爾有活動是正常的。如果持續不為零,說明伺服器記憶體不足,所有東西都在等磁碟。這時的解決辦法是加記憶體:參見 VPS 需要多少記憶體。在 EQVPS,您可以升級到更大的方案而無需重灌;您的資料原封不動。

相關

常見問題

我應該加多少 swap?

對於 1–2 GB 記憶體的伺服器,1–2 GB 的 swap 檔案是個不錯的預設值。更大的伺服器上,1–2 GB 作為安全網也依然夠用:「記憶體的兩倍」這條規則來自 256 MB 機器的年代。

swap 會讓伺服器變快嗎?

不會。swap 只是在記憶體短暫耗盡時防止崩潰:包更新、Docker 建置、備份。磁碟上的記憶體頁比記憶體慢幾千倍。如果伺服器一直在用 swap,說明它需要更多記憶體。

swappiness 有什麼作用?

它決定核心有多積極地把空閒記憶體移到 swap。預設值 60 會相當早地這麼做;設為 10 則告訴核心儘量把資料留在記憶體裡,主要在真正吃緊時才用 swap,這適合大多數伺服器。

為什麼用 swap 檔案而不是分割槽?

檔案可以在伺服器執行時幾秒內建立、調整大小和刪除,完全不用動分割槽表。在現代檔案系統上,效能是一樣的。

以後怎麼移除 swap?

執行 'swapoff /swapfile',刪掉 /etc/fstab 裡 /swapfile 那一行,然後執行 'rm /swapfile'。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。