【MIS】VM CPU 使用量爆高:Disk I/O 瓶頸

  • 44
  • 0
  • MIS
  • 2024-05-15

偶爾會有使用者反映操作系統時,一直跳出發生錯誤的提示框。從網站的log 發現是連線到資料庫逾時,於是前往資料庫端偵錯。再開啟資料庫VM 時發現操作非常的卡頓,於是開啟nmon 檢測到CPU 使用量非常的高,且都是postmaster (此為PostgreSQL 在Client-Server 中間做一個虛擬化的伺服器) 造成的,重開PostgreSQL 服務之後CPU 使用量馬上就降下來了。但不能每次發生都使用重開大法吧… 

環境如下:

  1. NAS 儲存池是由 六顆 R/W 3100/2700MB/s 的金士頓SEDC1500M3840G (U.2 NVMe SSD)組成總容量13.50TB 的RAID 6
  2. QNAP Virualization Station 3
  3. CentOS 8 Stream
  4. VM 硬碟容量 1.95T/Writeback/IDE
  5. 20 核心
  6. 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