性能測試-CPU瓶頸分析的思路
CPU(中央處理器),是電子電腦的主要設備之一,電腦中的核心配件。CPU作為電腦系統的運算和控制核心,是資訊處理、程式運行的最終執行單元。CPU的功效主要為處理指令、執行操作、控制時間、處理數據。
CPU性能相關指標
只看us那是不正確,不全面的。已圖上top命令為例,需要關注的CPU性能相關指標:
load average[系統平均負載]
us[用戶空間佔用CPU百分比]
sy[內核空間佔用CPU百分比]
ni[用戶進程空間內改變過優先順序的進程佔用CPU百分比]
id[空閑CPU百分比]
wa[等待輸入輸出的CPU時間百分比]
hi[硬中斷]
si[軟中斷]
平均負載
平均負載最理想的情況是等於CPU個數。
查詢CPU個數命令:lscpu
當平均負載高於 CPU 數量 70% 的時候,你就應該分析排查負載高的問題了。一旦負載過高,就可能導致進程響應變慢,進而影響服務的正常功能。最推薦的方法是持續觀察,判斷負載的變化趨勢,當發現負載有明顯升高趨勢時,進行分析判斷。
CPU利用率
在系統CPU分析過程中,(us,sy)當CPU利用率大於50%時,需要注意。當CPU利用率大於70%的時候,需要密切關注。當CPU利用率大約90%,情況就比較嚴重。當然每種情況下的CPU都有按需分析的可能。
以Java應用為例定位CPU瓶頸
1、jps 確定Java進程ID
2、top -Hp <pid> 確定進程內最耗費CPU的執行緒
3、printf 「%x\n」 <pid> 確定執行緒十六進位值
4、jstack <pid> | grep <執行緒十六進位值> 確定瓶頸程式碼
註:當然也可以選用strace、perf這類linux的性能分析工具。還有類似arthas這類二次封裝的工具。
等待輸入輸出的CPU時間
wa指標升高時,需要關注分析判斷系統是否在做IO操作,是否有IO瓶頸。
io情況查詢命令:iostat
掃一掃,關注我