1. 程式人生 > >壓力測試衡量CPU的三個指標:CPU Utilization、Load Average和Context Switch Rate

壓力測試衡量CPU的三個指標:CPU Utilization、Load Average和Context Switch Rate

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/marising/article/details/5182771

CPU Utilization 好理解,就是CPU的利用率,75%以上就比較高了(也有說法是80%或者更高)。除了這個指標外,還要結合Load Average和Context Switch Rate來看,有可能CPU高是因為後兩個指標高導致的。

Load Average ,這個很難衡量。網上搜了一圈,還沒見到幾個合理的解釋。我100個併發使用者測試數來這兩個值是:77.534%,6.108,CPU利用率比較高,Load Average也好像有點高。後來發現瞭如下兩片博文:

理解Load Average做好壓力測試 ,“Load Average是 CPU的 Load,它所包含的資訊不是 CPU的使用率狀況,而是在一段時間內 CPU正在處理以及等待 CPU處理的程序數之和的統計資訊,也就是 CPU使用佇列的長度的統計資訊。 ”,基本解釋了multi-process,multi-thread程式的原理。理解Linux處理器的負載均值(翻譯) ,簡單說起來就一句話:

    Load Average < CPU個數 * 核數 *0.7

比如1個1核CPU,Load Average < 1 * 1 * 0.7;1個4核的CPU,Load Average必須 < 1 * 4 * 0.7 = 2.8。

檢視cpu的資訊:grep 'model name' /proc/cpuinfo

Context Switch Rate 。就是Process(Thread)的切換,如果切換過多,會讓CPU忙於切換,也會導致影響吞吐量。《高效能伺服器架構 》這篇文章的第2節就是說的是這個問題的。究竟多少算合適?google了一大圈,沒有一個確切的解釋。Context Switch大體上由兩個部分組成:中斷和程序(包括執行緒)切換,一次中斷(Interrupt)會引起一次切換,程序(執行緒)的建立、啟用之類的也會引起一次切換。CS的值也和TPS(Transaction Per Second)相關的,假設每次呼叫會引起N次CS,那麼就可以得出

Context Switch Rate = Interrupt Rate + TPS* N

CSR減掉IR,就是程序/執行緒的切換,假如主程序收到請求交給執行緒處理,執行緒處理完畢歸還給主程序,這裡就是2次切換。也可以用CSR、IR、TPS的值代入公式中,得出每次事物導致的切換數。因此,要降低CSR,就必須在每個TPS引起的切換上下功夫,只有N這個值降下去,CSR就能降低,理想情況下N=0,但是無論如何如果N >= 4,則要好好檢查檢查。另外網上說的CSR<5000,我認為標準不該如此單一。

其他資訊:

這三個指標在LoadRunner中可以監控到;另外,在linux中,也可以用vmstat檢視r(Load Arerage),in(Interrupt)和cs(Context Switch)

#vmstat 1 5

procs --------------memory-------------    ----swap-- ---io--   -system------cpu----  r   b   swpd   free     buff       cache         si   so    bi    bo   in   cs us sy id wa  0  0 244644  29156 415720 2336484    0    0     1    49    2    1      1  0 98    0  0  0 244644  29140 415720 2336484    0    0     0    28    9    115  0  0 99    1  0  0 244644  29140 415720 2336484    0    0     0    24    62  256  0  0 100  0  0  0 244644  29140 415720 2336484    0    0     0     0     5    93    0  0 100  0  0  0 244644  29140 415720 2336484    0    0     0     0     58  255  0  0 100  0

Interrupt Rate包括核心由於程序的時間片中斷。(在 Linux 2.6 中,系統時鐘每 1 毫秒中斷一次時鐘頻率,用 HZ 巨集表示,定義為 1000,即每秒中斷 1000 次。系統不一樣,核心不一樣配置100、250的都有。)

核心的時鐘頻率可以通過如下命令知道

cat /boot/config-`uname -r` | grep '^CONFIG_HZ='

CONFIG_HZ=100

每秒總的時鐘中斷數就是 = cpu個數 * 核數 * CONFIG_HZ

cat /proc/interrupts

          CPU0       CPU1       CPU2       CPU3       LOC:   97574747   52361843  105207680   69447653   Local timer interrupts RES:     107368     257510      98635     186294   Rescheduling interrupts CAL:      14174      14206      14164        194   function call interrupts TLB:    1007949     853117     992546     591410   TLB shootdowns

可以檢視中斷的型別以及次數 

後記:

發現一篇Linux效能監控的文章,特貼在這裡,供參考

==========================================================================

效能相關的系列文章:

--------------------- 本文來自 Coder李海波 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/marising/article/details/5182771?utm_source=copy