Ubuntu VPS 增加 Swap 空間

要在 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,這有助於維持效能。

About the author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *