在Ubuntu中加入SWAP分區

我們在架設伺服器時,有時會選擇使用雲端主機,但是為了節省經費會選擇硬體需求較低的主機。此時,就可能會發生記憶體容量不足的問題,這時候就可以設置SWAP交換分區,它的功能就好像Windows虛擬記憶體一樣,可以把部分的硬碟空間當作記憶體進行讀寫。

SWAP分區要設多大?

根據Ubuntu官方的解釋,如果RAM小於1GB,那SWAP至少設為1GB,至少應該要設定和RAM相等大小的SWAP;然而SWAP的大小超過RAM的2倍時,會有效益的遞減問題。並且根據休眠設定與否也會有設定上的差異,Ubuntu官方的建議值大致如下:(參考來源:https://help.ubuntu.com/community/SwapFaq

RAM未休眠有休眠最大值
256MB256MB512MB512MB
512MB512MB1024MB1024MB
1GB1GB2GB2GB
2GB1GB3GB4GB
3GB2GB5GB6GB
4GB2GB6GB8GB
5GB2GB7GB10GB
6GB2GB8GB12GB
8GB3GB11GB16GB
12GB3GB15GB24GB
16GB4GB20GB32GB
24GB5GB29GB48GB
32GB6GB38GB64GB
64GB8GB72GB128GB
128GB11GB139GB256GB
256GB16GB272GB512GB
512GB23GB535GB1TB
1TB32GB1056GB2TB
2TB46GB2094GB4TB
4TB64GB4160GB8TB
8TB91GB8283GB16TB

1. 檢查SWAP空間存不存在

如果顯示的內容是空的,表示SWAP空間不存在。

swapon -s

(如果要)取消原本的交換分區

sudo swapoff /swapfile

2. 檢查空間是否足夠

檢查一下系統是否有足夠的硬碟空間來設置SWAP。

df -hal

3. 新增SWAP分區

bs表示每一次讀取的大小,單位是bytes;count表示數量。因此以下範例為 1024bytes * 1048576 = 1GB

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

會收到訊息

輸入 1048576+0 個紀錄
輸出 1048576+0 個紀錄
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.86487 s, 278 MB/s

4. 格式化SWAP分區

sudo mkswap /swapfile

會收到訊息

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
無標籤, UUID=cdf569da-3621-41ee-9551-9cce3bb0fd98

5. 啟動SWAP分區

sudo swapon /swapfile

此時再查看一次SWAP交換空間

swapon -s

會發現已經存在交換分區了

Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -2

6. 自動掛載SWAP分區

用vim之類的文字編輯器打開 /etc/fstab 檔案,在最後面加上此行

/swapfile          swap            swap    defaults        0 0

並且設定SWAP檔案的存取權限

sudo chown root:root /swapfile
sudo chmod 600 /swapfile

7. 優化SWAP分區使用頻率

Linux對於進程 (Process) (即:執行中的程式)會分成「就緒 (Standby)」、「睡眠 (Sleep)」、和「活動 (Active)」。當被分類為睡眠時,會被保存在SWAP分區內,但是如果RAM夠大,那麼可以透過設定swappiness來降低SWAP分區的使用頻率,讓系統不要頻繁讀寫硬碟!

當swappiness為0時表示積極使用RAM;為100時表示積極使用SWAP分區,而Ubuntu預設值為60。

我們可以透過以下指令檢查目前的swappiness:

cat /proc/sys/vm/swappiness

7-1. 臨時性調整

若要將swappiness調整為為10(舉例),可以使用以下指令更改:

sudo sysctl vm.swappiness=10

7-2. 要永久性調整

用vim之類的文字編輯器打開 /etc/sysctl.conf 檔案,在最後面加上此行

# Search for the vm.swappiness setting.  Uncomment and change it as necessary.
vm.swappiness=10