小伺服器總是在最糟糕的時候耗盡記憶體:一次 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,您可以升級到更大的方案而無需重灌;您的資料原封不動。
評論
目前還沒有評論。歡迎成為第一位。