問題現象
響應慢:SSH命令執行卡頓,網站或API訪問緩慢、逾時。
指標高:CPU、記憶體、磁碟I/O監控持續超過80%。
服務中斷:關鍵進程被系統終止(OOM),執行個體自動重啟。
無法登入:SSH串連被拒絕。
問題原因
程式問題:應用代碼存在效能瓶頸或記憶體流失。
流量突增:並發訪問超出執行個體處理能力。
I/O瓶頸:磁碟讀寫達到飽和,CPU大量等待(
iowait高)。
解決方案
步驟一:使用htop快速定位異常進程
通過VNC串連登入ECS執行個體。
訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。
進入目標執行個體詳情頁,單擊遠端連線,選擇通過VNC遠端連線。輸入帳號和密碼,登入ECS執行個體。
安裝並運行htop。
sudo yum install -y htop htop在htop介面中分析。
找CPU消耗高的進程:按
F6鍵,選擇PERCENT_CPU降序排序。找記憶體消耗高的進程:按
F6鍵,選擇PERCENT_MEM降序排序。
步驟二:使用sar工具全面診斷資源瓶頸
當htop定位到現象後,使用sar擷取量化資料,確認瓶頸是CPU、記憶體還是I/O。
安裝並啟用sysstat。
sudo yum install -y sysstat systemctl start sysstat && systemctl enable sysstat執行專項分析。
分析CPU(
sar -u):確認CPU時間花費在哪。# 每秒採集1次,共採集5次 sar -u 1 5%user高:應用程式問題。%system高:核心或I/O調用頻繁。%iowait持續大於20%:瓶頸在磁碟I/O。
分析系統負載(
sar -q)衡量系統繁忙程度。# 每2秒採集1次,共採集5次 sar -q 2 5ldavg-1大於CPU核心數:系統已過載。runq-sz高:較多進程在排隊等待CPU。
分析記憶體與交換(
sar -r和sar -W):判斷記憶體是否耗盡。# 分析記憶體使用量 sar -r 1 3 # 分析交換活動(Swap) sar -W 1 3pswpin/s或pswpout/s持續大於0:實體記憶體不足,系統正在使用硬碟作虛擬記憶體,效能會下降。
分析磁碟I/O(
sar -d):定位磁碟效能瓶頸。# 每秒採集1次,共採集3次,分析具體磁碟 sar -d 1 3%util接近100%:磁碟I/O已飽和。await大於20ms:I/O請求處理時間過長。
步驟三:針對性處理與最佳化
高CPU消耗的業務進程:
代碼最佳化:使用
perf(C/C++),jstack(Java)等工具定位並最佳化熱點代碼。邏輯最佳化:檢查並修複死迴圈、全表掃描SQL等低效操作。
記憶體不足或頻繁Swap:
排查泄漏:使用
valgrind(C/C++),jmap(Java)等工具分析記憶體流失。調整配置:合理配置應用的記憶體參數,如JVM的
-Xms,-Xmx。升級資源:升降配執行個體概述以增加實體記憶體。
高磁碟I/O:處理Linux系統磁碟I/O負載過高問題。
後續建議
配置監控警示:為CPU、記憶體、負載、磁碟等關鍵計量設定警示閾值,實現早期預警。
規劃Auto Scaling:對Web應用等波動性負載,配置Auto Scaling策略,自動增減執行個體以應對流量變化。