要在 Ubuntu 24.04 的 VPS 上增加 swap 空間,你可以按照下列步驟操作。這通常用於記憶體較小的伺服器,防止因為記憶體不足導致程式崩潰。
檢查目前的 swap 狀態
在開始之前,先確認系統是否已經有 swap 空間。輸入 free -h 或是 swapon –show。如果輸出結果是空的,代表目前沒有 swap。
建立 swap 檔案
決定你要增加的大小,通常建議是記憶體的 1 倍到 2 倍。這裡以增加 2G 為例。
使用 fallocate 指令快速建立檔案:
sudo fallocate -l 2G /swapfile
如果系統提示找不到 fallocate,也可以使用傳統的 dd 指令:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
設定檔案權限
為了安全起見,只有 root 使用者應該有讀寫 swap 檔案的權限。
sudo chmod 600 /swapfile
格式化並啟用檔案
將該檔案轉化為 swap 格式:
sudo mkswap /swapfile
接著啟用它:
sudo swapon /swapfile
此時你可以再次輸入 free -h,應該就能看到 swap 欄位出現了剛才設定的大小。
設定開機自動掛載
目前的設定在重啟伺服器後會消失。為了讓它永久生效,需要修改 /etc/fstab 檔案。
建議先備份檔案:
sudo cp /etc/fstab /etc/fstab.bak
然後將設定寫入:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
調整 swappiness 參數
swappiness 決定系統使用 swap 的頻率,數值在 0 到 100 之間。對於 VPS 來說,通常設定在 10 到 60 之間比較合適。數值愈小,系統愈傾向使用實體記憶體。
查看目前數值:
cat /proc/sys/vm/swappiness
如果你想暫時修改為 10:
sudo sysctl vm.swappiness=10
若要永久修改,請編輯 /etc/sysctl.conf,在檔案末尾加入 vm.swappiness=10。
sudo nano /etc/sysctl.conf
這是一個自動化腳本,你可以將它儲存在伺服器上執行。這個腳本會自動建立一個 2G 的 swap 檔案,並完成所有權限與永久掛載的設定。
建立自動化腳本
你可以使用 nano 建立檔案:
nano setup_swap.sh
將以下內容貼上:
Bash
#!/bin/bash
# 設定 swap 大小為 2G
SWAP_SIZE="2G"
SWAP_PATH="/swapfile"
# 檢查是否具備 root 權限
if [[ $EUID -ne 0 ]]; then
echo "請使用 sudo 執行此腳本"
exit 1
fi
echo "正在建立 ${SWAP_SIZE} 的 swap 檔案..."
fallocate -l $SWAP_SIZE $SWAP_PATH || dd if=/dev/zero of=$SWAP_PATH bs=1M count=2048
echo "設定權限..."
chmod 600 $SWAP_PATH
echo "格式化 swap..."
mkswap $SWAP_PATH
echo "啟用 swap..."
swapon $SWAP_PATH
echo "設定開機自動掛載..."
if ! grep -q "$SWAP_PATH" /etc/fstab; then
echo "$SWAP_PATH none swap sw 0 0" >> /etc/fstab
fi
echo "調整 swappiness 為 10..."
sysctl vm.swappiness=10
if ! grep -q "vm.swappiness" /etc/sysctl.conf; then
echo "vm.swappiness=10" >> /etc/sysctl.conf
else
sed -i 's/vm.swappiness=.*/vm.swappiness=10/' /etc/sysctl.conf
fi
echo "完成!目前的記憶體狀態:"
free -h
執行腳本
存檔離開後(Ctrl+O 然後 Ctrl+X),賦予執行權限並執行:
chmod +x setup_swap.sh
sudo ./setup_swap.sh
確認結果
執行完畢後,你可以觀察最後顯示的表格。如果 swap 這一列的總量(total)不再是 0,就代表設定成功。這個腳本也幫你處理了 swappiness 的設定,讓伺服器優先使用物理記憶體,只有在必要時才動用硬碟上的 swap,這有助於維持效能。