問題現象
應用服務異常:業務應用效能下降,服務響應逾時,或出現與I/O相關的錯誤記錄檔。
監控指標警示:CloudMonitor顯示磁碟的
%util(使用率)指標接近或持續處於100%,或收到磁碟IOPS、輸送量超閾值的警示。
問題原因
高I/O消耗進程:執行個體內部啟動並執行某個進程(如資料庫讀寫、日誌大量寫入、備份任務)產生大量磁碟讀寫請求,佔滿了磁碟I/O頻寬。
磁碟效能瓶頸:當前業務的正常I/O需求超出了執行個體所掛載雲端硬碟的效能上限(IOPS或輸送量)。
解決方案
使用iostat確認磁碟瓶頸,然後利用iotop定位具體進程,最後按需最佳化或升級資源。
步驟一:確認磁碟I/O瓶頸
登入ECS執行個體。
訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。
進入目標執行個體詳情頁,單擊遠端連線,選擇通過Workbench遠端連線。根據頁面提示登入,進入終端頁面。
使用
iostat監控磁碟I/O狀態。安裝sysstat工具包。
Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y sysstatUbuntu / Debian
sudo apt install -y sysstatopenSUSE
sudo zypper install -y sysstat執行
iostat,每2秒重新整理一次資料。iostat -d -x -k 2
分析
iostat輸出結果。重點關註:r/s,w/s:每秒讀、寫請求次數(IOPS)。rkB/s,wkB/s:每秒讀、寫資料量(輸送量)。%util:磁碟I/O的使用率。如果持續接近100%,說明磁碟裝置已達到飽和狀態。
步驟二:定位高I/O消耗進程
磁碟I/O達到飽和狀態後,需進一步定位是哪個進程導致的高負載。
使用
iotop即時查看進程的I/O活動。安裝
iotop。Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y iotopUbuntu / Debian
sudo apt install -y iotopopenSUSE
sudo zypper install -y iotop顯示活躍的I/O進程。
sudo iotop -o
分析
iotop輸出結果。定位進程:從
DISK WRITE或DISK READ找出I/O最高的進程。輔助判斷:
IO>列顯示進程等待I/O的時間佔比。
步驟三:分析並處理異常進程
分析原因:可能源於SQL慢查詢、記錄層級過高或檔案讀寫頻繁等問題。
處理方法(包括但不限於):
資料庫:檢查慢查詢日誌,最佳化SQL語句和索引。
Log Service:降低應用程式的記錄層級(如從DEBUG改為INFO),並配置日誌輪轉。
檔案鎖:檢查檔案讀寫邏輯。使用記憶體緩衝,增加緩衝區。
步驟四:評估並升級磁碟效能(可選)
如果排查後無法通過應用程式層最佳化降低,可以通過升級磁碟來提升效能。
評估需求:根據
iostat監控到的實際IOPS和輸送量,確定效能目標。執行升級:根據效能目標,將雲端硬碟升級到更高規格。
後續建議
配置監控警示:為磁碟的
%util、IOPS、輸送量等關鍵計量配置合理的警示閾值(如80%),實現問題早期發現。應用I/O最佳化:在應用程式層面,儘可能使用緩衝減少對磁碟的直接讀寫。對於寫密集的情境,考慮採用非同步寫入或批量寫入的方式,平滑I/O峰值。