性能測試-CPU瓶頸分析的思路

CPU(中央處理器),是電子電腦的主要設備之一,電腦中的核心配件。CPU作為電腦系統的運算和控制核心,是資訊處理、程式運行的最終執行單元。CPU的功效主要為處理指令、執行操作、控制時間、處理數據。

CPU性能相關指標

image

只看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

掃一掃,關注我