本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
因為大食怪的WP主題,導致 EC2 主機發生
- CPU 負載過高
- 記憶體存取過高
- 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來自動化處理了