Amazon EC2 hight CPU load with LNMP

因為大食怪的WP主題,導致 EC2 主機發生

  1. CPU 負載過高
  2. 記憶體存取過高
  3. DISK I/O過高 <<這個最傷本…

我的伺服器是用 LNMP 架構,Nginx對於運算量大的PHP實在吃不消,一個主題就快吃垮了

這邊記錄一下整個 DEBUG過程

CPU部分會飆高的主要原因是記憶體用完,又加上預設EC2不配Swap空間(註1)

註1: 開了就會被OS拿去寫,寫就會增加 I/O數,一沒管好,錢就會跟著飛喔~呵呵

所以解決辦法就是配一個給他!

參考這篇:Amanon EC2 上 CPU 使用率破表達到 100% 的解決方法

以下部分引用筆記一下

設定及建立 swap 檔過程

(1) 建立 swap 檔,檔名 memswap

指令: dd if=/dev/zero of=/memswap bs=1M count=764

(2) 設定 swap 分割區

指令: mkswap /memswap

(3) 啟用 swap 分割區

指令: swapon /memswap

(4) 設定開機自動啟動 swap 分區

指令:vi /etc/fstab

在 fstab 這個檔案裡頭加上這一行指令 /memswap swap swap defaults 0 0

另外這參考網站中有一篇提到因為 wp-cron.php 周期性執行關係導致 100% 的部分我是沒觀察到啦,不過也值得註意!

再來是主因-記憶體過高 + DISK I/O 過高

這跟那主題實在拖離不了關系,一查之下發現他為了讓縮圖功能更彈性,排版美一點,有些區塊讀取圖片時都會去檢查並重新縮圖,這樣不只會造成記憶體不足還會造成DISK I/O過高阿!!!

怎麼查的? (我先查DISK I/O..畢竟不要跟荷包過不去)

使用 find 指令,查詢最近被修改存取過的檔案

find /path/to/www -type f -amin -10

更多用法可以參考:在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記

然後發現是圖片是被一個library給縮圖+快取存放在某個目錄下

trace code的部分就不用說了,反正是找到那個功能,改寫一下他的輸出就好。

不過這中間有用到一個東西,筆記一下

PHP-FPM 有個功能可以設定 slow.log 記錄檔,顧名思義就是誰慢誰吃資源就記錄誰,觀察這個檔案前要先開啟這功能。

設定php-fpm.conf檔內的兩個地方

request_slowlog_timeout = 7s
slowlog = /path/to/log/slow.log

可以參考這篇:善用 PHP-FPM 的 slow log 分析问题

最後當然就是觀察一些系統規則,寫一些script來自動化處理了

Facebook 外掛整合


Share: