效能測試——處理器分析方法
處理器分析方法
處理器(CPU)也可能是系統的瓶頸,如下是針對處理器進行分析的步驟:
-
檢視System\%Total Processor Time效能計數器的計數值
該計數值用於體現伺服器整體的處理器使用率,對多處理器系統來說,該值體現了所有CPU的平均使用率。該值的數值持續超過90%,則說明整個系統面臨著處理器方面的瓶頸,需要通過增加處理器來提高效能。
PS:由於作業系統本身的特性,在某些多CPU系統中,該資料本身並不大,但若CPU之間的負載情況極為不均衡,也應該視作系統產生了處理器方面的瓶頸。
-
檢視每個CPU的Processor\%ProcessorTime和Processor\%UserTimes
Processor\%User Time是指系統的非核心作業系統消耗的CPU時間,如果該值較大,可以考慮是否通過演算法優化等方法來降低該值。如果該伺服器是資料庫伺服器,Processor\%User Time值大的原因很可能是資料庫的排序或函式操作消耗了過多的CPU時間,此時可以考慮對資料庫系統進行優化。
-
研究系統處理器瓶頸
檢視System\Processor Queue Length計數器的值,當該計數器的值大於CPU數量的總數加1時,說明處理器阻塞。處理器的%Process Time值很高時,一般都伴隨著處理器阻塞,但產生處理器阻塞時,
%DPC Time該值越低越好,在多處理器系統中,如果該值大於50%並且Processor\%Process Time值非常高,則考慮加入一個網絡卡來提高效能
Linux/UNIX處理器分析方法
處理器(CPU)也可能是系統的瓶頸,如下是針對處理器進行分析的步驟:
-
檢視Processor\%Idle Time效能計數器的值
該計數器描述的是CPU總的空閒時間。如果該值持續低於10%,表明瓶頸是CPU。可以考增加一個處理器或換一個更快的處理器。
PS:該計數器的值可以通過top
-
檢視Processor\%User Time 和 System\%User Time、System\CPU context switches
Processor\%User Time是指系統非核心操作消耗的CPU時間。一般來說如果系統中使用了大量的演算法和複雜的計算操作,該值會比較大。
System\%User Time系統上所有處理器執行非核心操作的平均時間的百分比,該值反映了用於有用作業上的時間的比率
System\CPU context switches是CPU上下文切換。在vmstat的結果中顯示為CS。
例如:CPU 100 6570 User Time,%-%05 Idle Time;大量的上下文切換是可以接受的。
PS:檢視processor資訊用top命令,system用vmstat應用
-
可執行佇列
每個可執行佇列不應該超過1-3個執行緒(每處理器)。
PS:Vmstat中一些引數介紹:
r CPU ,被 IO ,被處理過的中斷數
cs,使用者佔用的百分比
sys CPU ,所有可執行的執行緒被 IOCPU ,完全空閒的百分比
PS:mpstat輸出多個處理器資料:
對CPU使用率過高的程序中的所有執行緒進行排序的命令:
ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx
單執行緒CPU使用過高可能有哪些原因?
-
產生死迴圈
-
首先查一下出問題程序的pid: ps -ef | grep icdn
-
然後top命令檢視執行緒資訊:top -H -p PID號
-
接下來,我們用gdb來attach目標程序:gdb icdn PID號(與2一樣)gdb已經列出了各執行緒正在執行的函式,記住行首標號
-
執行thread 行首標號: thread 執行緒id
-
然後執行:bt
-
最後:detach()
除錯完指定程序後,可以執行detach命令來讓GDB釋放該程序,該程序得以繼續執行。當回車時,detach不會重複。當執行完detach後,程序和GDB不再相關,GDB可以attach其他程序。
-
執行緒太多
-
機器配置差