偶爾會有使用者反映操作系統時,一直跳出發生錯誤的提示框。從網站的log 發現是連線到資料庫逾時,於是前往資料庫端偵錯。再開啟資料庫VM 時發現操作非常的卡頓,於是開啟nmon 檢測到CPU 使用量非常的高,且都是postmaster (此為PostgreSQL 在Client-Server 中間做一個虛擬化的伺服器) 造成的,重開PostgreSQL 服務之後CPU 使用量馬上就降下來了。但不能每次發生都使用重開大法吧…
環境如下:
- NAS 儲存池是由 六顆 R/W 3100/2700MB/s 的金士頓SEDC1500M3840G (U.2 NVMe SSD)組成總容量13.50TB 的RAID 6
- QNAP Virualization Station 3
- CentOS 8 Stream
- VM 硬碟容量 1.95T/Writeback/IDE
- 20 核心
- 64GB 記憶體
以LINUX CPU HIGH USAGE,查詢到的大多數都是說Disk I/O 問題造成CPU 效能降低。
如圖所示:
- User% (綠色):使用者所使用的CPU 百分比,為應用程式使用
- Sys% (紅色):Kernel 程序所使用的CPU 百分比,為CPU 與硬體溝通使用
使用nmon 觀察後,的確是當存取磁區Busy 的時候CPU 就會開始發作。
但是很奇怪,明明就是用世界快的SSD,怎麼R/W 不到30MB/s 還會造成CPU 使用量高?
偶然在搜尋時發現以下線索,發現可能是硬碟相容性設定(當下設定為IDE)
https://www.facebook.com/groups/pve.tw/posts/1773818482786705/?locale=zh_TW
再來使用fio 做不同相容性的測試,發現也差太多了吧,原本介面選用IDE 的狀況下,Read 效能只有規格的1% 不到,Write 更是一個慘字。雖然選用VirtIO 有所改善,但與磁碟規格比較來說也是很低。
經過初步調整後,Disk I/O 的問題已不復見。不過使用iotop, nmon等效能監測工具發現,本次問題的元兇是SQL查詢時CPU/Disk 使用量非常大,未來會針對SQL 查詢做深入的研究及優化,以降低硬體負擔。
References:
https://www.facebook.com/groups/pve.tw/posts/1773818482786705/?locale=zh_TW
https://blog.jason.tools/2019/01/disk-perf-issue.html
https://blog.toright.com/posts/5051/linux-disk-io-%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6