前言
依照 AWS 官方教學建立了 2個 WordPress 網站 [請參考下方連結],幾個月後卻出現異常,一開始是資料庫無法連線,後來出現 503 Service Unavailable。
依照教學建立時並沒有設置 pem,因此一開始無法馬上連線到主機查看,而且主機異常狀況下無法建立 pem,即使建立後也因為異常無法連線。
最後以付費方案聯繫了 AWS,取得協助與指引後順利解決異常。
解決方案
在檢查 log,發現問題點「No space left on device」後,我們嘗試將 EBS 空間加大,但是主機仍然是異常狀態,這是因為光是加大 EBS 彈性磁碟的空間,主機並不會自動匹配到加大的空間,需要連入 EC2 以指令進行設定。
但是目前的 EC2 主機處於異常狀態,因此解法是
建立一個新的 EC2 主機,將 EBS 磁碟匹配到新的主機,以新的主機進行磁碟區的設置,再將更新後的 EBS 磁碟匹配回舊的主機。
解除異常步驟流程
1. 加大硬碟容量
依照 AWS 官方教學啟動 WordPress 網站時,會自動建立 EBS 儲存磁碟區,預設空間是 10G,建立時即佔用將近 4G。
要在 EC2 服務頁面,ELASTIC BLOCK STORE ➡ Volumes 頁籤修改磁碟空間大小
Actions ➡ Modify Volume
2. 建立新的 EC2 主機
在 EC2 服務頁面,INSTANCES ➡ Instances 頁籤建立一台新主機
Launch Instance
3. 將空間已滿的 EBS 磁碟匹配到新建立的主機
要在 EC2 服務頁面,INSTANCES ➡ Instances 頁籤,先暫停舊的主機與新的主機
Actions ➡ Instance State ➡ Stop
接著將 EBS 磁碟從舊的 EC2 主機分離
要在 EC2 服務頁面,ELASTIC BLOCK STORE ➡ Volumes 頁籤分離磁碟
Actions ➡ Detach Volume
接著將 EBS 磁碟連接到新的 EC2
要在 EC2 服務頁面,ELASTIC BLOCK STORE ➡ Volumes 頁籤連接磁碟
Actions ➡ Attach Volume
4. 在新的 EC2 主機上設置空間已滿的 EBS 磁碟
要先連線到新的 EC2 主機(可以使用 ssh 連接)
Connect
接著進行以下指令,建立一個 fixroot 資料夾,將空間已滿的磁碟掛載到該資料夾後重新切割更改空間。
請注意: 磁碟路徑 /dev/xvdf or /dev/xvdf1 請改成您自己的路徑
[ec2-user ~]$ sudo mkdir /fixroot
[ec2-user ~]$ sudo mount /dev/xvdf1 /fixroot
[ec2-user ~]$ cd /fixroot/
[ec2-user ~]$ sudo growpart /dev/xvdf 1
[ec2-user ~]$ sudo resize2fs /dev/xvdf1
完成後可執行以下指令,就可以看到更新後的磁碟空間
[ec2-user ~]$ sudo df -h | grep xvdf
異常點與解決方式
在排除異常、重啟伺服器完畢、追蹤伺服器狀況後,
發現會造成空間用盡的原因有以下 4點
1. 自動更新時下載的檔案
發現到路徑 /usr/src 中有許多名稱類似的資料夾,佔用了約數百 MB的空間。
有興趣的朋友也可以參考下方連結
2. WordPress 會備份資料,造成空間更快速用盡。
資料佔 1份大小,備份佔 1份大小,因此使用空間的速度變成 2倍。
3. WordPress 上傳圖片檔案機制
上傳 1張圖片時,伺服器會儲存多個解析度的圖片,這將會佔用約 2~3倍的空間。
這是合理的,因為不同解析度的裝置載入不同解析度的圖片,可以優化網站的效能。
4. 從上述 「AWS 官方教學 - 啟動 WordPress 網站」 建立網站時,空間預設是 10G,在網站上傳資料多時會用盡。
因此當網站累積資料後,終有一天是必須擴增空間的。
結論
上述第 1點的狀況,不建議關閉自動更新。雖然檔案是可以手動刪除的,但是資料不大,又麻煩。
而上述 2, 3點的狀況也是不建議輕易更動。
因此,建議還是在空間正常用盡的狀況下增加磁碟大小。