1. 程式人生 > >效能測試——處理器分析方法

效能測試——處理器分析方法

處理器分析方法

處理器(CPU)也可能是系統的瓶頸,如下是針對處理器進行分析的步驟:

  1. 檢視System\%Total Processor Time效能計數器的計數值

    該計數值用於體現伺服器整體的處理器使用率,對多處理器系統來說,該值體現了所有CPU的平均使用率。該值的數值持續超過90%,則說明整個系統面臨著處理器方面的瓶頸,需要通過增加處理器來提高效能。

    PS:由於作業系統本身的特性,在某些多CPU系統中,該資料本身並不大,但若CPU之間的負載情況極為不均衡,也應該視作系統產生了處理器方面的瓶頸。

  2. 檢視每個CPUProcessor\%ProcessorTimeProcessor\%UserTimes

    Processor\%PrivilegedTime

    Processor\%User Time是指系統的非核心作業系統消耗的CPU時間,如果該值較大,可以考慮是否通過演算法優化等方法來降低該值。如果該伺服器是資料庫伺服器,Processor\%User Time值大的原因很可能是資料庫的排序或函式操作消耗了過多的CPU時間,此時可以考慮對資料庫系統進行優化。

  3. 研究系統處理器瓶頸

    檢視System\Processor Queue Length計數器的值,當該計數器的值大於CPU數量的總數加1,說明處理器阻塞。處理器的%Process Time值很高時,一般都伴隨著處理器阻塞,但產生處理器阻塞時,

    Processor\%Process Time計數器的值並不一定很大,此時就需要檢視處理器阻塞的原因。

%DPC Time該值越低越好,在多處理器系統中,如果該值大於50%並且Processor\%Process Time值非常高,則考慮加入一個網絡卡來提高效能

Linux/UNIX處理器分析方法

處理器(CPU)也可能是系統的瓶頸,如下是針對處理器進行分析的步驟:

  1. 檢視Processor\%Idle Time效能計數器的值

該計數器描述的是CPU總的空閒時間。如果該值持續低於10%,表明瓶頸是CPU。可以考增加一個處理器或換一個更快的處理器。

PS:該計數器的值可以通過top

命令輸出結果。

  1. 檢視Processor\%User Time System\%User TimeSystem\CPU context switches

    Processor\%User Time是指系統非核心操作消耗的CPU時間。一般來說如果系統中使用了大量的演算法和複雜的計算操作,該值會比較大。

    System\%User Time系統上所有處理器執行非核心操作的平均時間的百分比,該值反映了用於有用作業上的時間的比率

    System\CPU context switchesCPU上下文切換。在vmstat的結果中顯示為CS

    例如:CPU 100 6570 User Time%-05 Idle Time大量的上下文切換是可以接受的

PS:檢視processor資訊用top命令,systemvmstat應用

  1. 可執行佇列

    每個可執行佇列不應該超過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使用過高可能有哪些原因?

  1. 產生死迴圈

  1. 首先查一下出問題程序的pid ps -ef | grep icdn

  2. 然後top命令檢視執行緒資訊:top -H -p PID

  3. 接下來,我們用gdbattach目標程序gdb icdn PID號(與2一樣)gdb已經列出了各執行緒正在執行的函式,記住行首標號

  4. 執行thread 行首標號: thread 執行緒id

  5. 然後執行:bt

  6. 最後:detach()

除錯完指定程序後,可以執行detach命令來讓GDB釋放該程序,該程序得以繼續執行。當回車時,detach不會重複。當執行完detach後,程序和GDB不再相關,GDB可以attach其他程序。

  1. 執行緒太多

  2. 機器配置差