為 VPS 開啟SWAP 分區

為 VPS 增加 SWAP 分區,讓 Ghost 能在 1GB 服務器暢跑。

為 VPS 開啟SWAP 分區
SWAP Partition cover

很多人都是用 Ghost 服務覺得很卡,其實是因爲主機商沒有預設開啓 Swap,這就是爲什麼幾乎沒法運行,(MySQL 8 真的是佔用很多),所以我們需要加入 Swap 分區。

前因:

本以爲用作寫作用途,1GB主機應該可以應付兩個Ghost網站,可惜事與願違,網頁直接卡得不行,更不用說安裝其他應用,就連 reboot 都能卡的很久,根據Digital Ocean的後臺可以看到主機的占用,CPU使用率常常達到100%,Disk I/O也一直讀取,雖然沒給出什麽調查,但我相信是因爲RAM不足以應付需求。

找出效能瓶頸

之前在 18.04 的資源占用都沒有後來升級 20.04 後來的高。

终于知道为什么Ghost的最低要求限制在1GB了,原本的计划是在1GB的主机安装多个Ghost平台分用作不同的写作用途,多次因爲RAM不足,網站無法正常運作。

爲了找出原因,我發現MySQL占用過多的記憶體,每當有寫入都會造成主機當機,甚至無法正常的寫文章。

我們也能安裝digitalocean脚本,以便在DO的網站上看到主機的負載(比預設多了更多指標),之後就能在DO的控制面板更多的主機負載指標,這樣就能很好的看到效能瓶頸出在哪兒?

curl -sSL https://repos.insights.digitalocean.com/install.sh | sudo bash

DO Monitor

示範圖,并非當時主機的負載狀態

主機記憶體不足的解決方案

既然知道了問題所在那就只能上網找解決方案了,目前整理出的解決方法有兩個:

  1. 劃分部分儲存空間用作SWAP區
  2. 升級Droplet

劃分部分儲存空間用作 SWAP

國外的論壇查詢后,發現原來在Ubuntu 20.04預設是沒有安裝SWAP的,也就是説硬盤沒有劃分出SWAP用作記憶體的緩衝,這就直接導致了主機因爲記憶體不足衍生除了各種應用無法使用的問題。

Swap區域

就是在這裏沒看到Swap區域

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

劃分Swap - 在這裏之前,我們被確保我們硬盤有足夠的空間讓我們劃分一部分硬盤多餘的儲存空間

sudo fallocate -l 1G /swapfile

啓用 - 確保使用的是root用戶,才能修改swap權限

sudo chmod 600 /swapfile

標記 swap區域

sudo mkswap /swapfile

啓用swap文件

sudo swapon /swapfile

再次確認

free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
Swap:         1.0Gi          0B       1.0Gi

重啓后也能自動啓動Swap

爲了讓主機重啓后,也能使用Swap設定,我們需要輸入以下指令:

備份配置

sudo cp /etc/fstab /etc/fstab.bak

重啓后也能自動啓用Swap的設定

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Swap 進階設定

因爲記憶體怎麽樣都會比硬盤快,所以我們應該最大限度優先使用記憶體:

sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50

同樣的如果想重啓也能自動啓用一樣的設定,我們也必須在 /etc/sysctl.conf 加入同樣的設定。

sudo nano /etc/sysctl.conf

在最後一行中加入 vm.swappiness=10vm.vfs_cache_pressure=50 。完成后 ctrl + x 退出 Enter 储存皆可。


升級 Droplet Resize Droplet

How to Resize Droplets | DigitalOcean Documentation
Resizing a Droplet lets you change the amount of CPU and RAM a Droplet has, optionally add additional disk space, and change to a different type of Droplet plan or CPU.

事實上同樣的價格DigitalOcean有兩種選項:

  1. 升級CPU & RAM - 可任意升級或還原
  2. 升級CPU RAM & +25GB Disk -將來只能升級,采用后無法取消/還原會原本的硬盤空間。
🏊‍♀️
水很深!

因爲選項二多了永久升級25GB儲存空間,長遠來看會比較划算,但是因爲擴充了儲存空間的的關係再也回不到之前的5塊錢的配套了。

根據DigitalOcean官網建議升級前記得進行 「快照備份snapshot 」及主機給 「關機power off 」(下圖的右上角,可以點擊關閉即可),然後到Resize選擇升級選項即可,升級完成后 「開機power on 」即可。


💡
目前網站所采用的方案為劃分SWAP區

其實一開始在沒檢查的時候我直接升級Droplet,但還是會在思考就算Ghost推薦只需1GB RAM,但也不應該長時間用滿才對,所以就上網查找,真的很多人都碰到一樣的問題;因爲主機除了Ghost部落格之外并沒有安裝其他的應用,在實際需求以及成本的考量下,我選擇了劃分SWAP區,目前還算穩定。

參考:Run Ghost on 1GB RAM without getting stuck- Solution