系​統​吞​吐​量​(​T​P​S​)​、​用​戶​並​發​量​、​性​能​測​試、IO負載學習

Andrew.Hann發表於2014-08-13

目錄

1. 如何評價一個系統的效能
2. 系統吞度量
3. 網路上下行資料量
4. 客戶端-服務端TCP同時長連線數量
5. 系統效能的指標計算
6. 系統IO負載

 

1. 如何評價一個系統的效能

在文章的開始,我們需要明白幾個問題

1. 為什麼要進行系統效能測試評估
2. 什麼是效能測試
3. 評價一個系統的效能的指標有哪些

0x1: 為什麼要進行系統效能測試評估

效能測試的目的是驗證系統(或者軟體)是否能夠達到預期提出的效能指標,同時發現系統中存在的效能瓶頸,最後起到優化系統的目的。包括以下幾個方面

1. 評估系統的能力
測試中得到的負荷和響應時間資料可以被用於驗證所計劃的模型的能力,並幫助作出決策
2. 識別體系中的弱點 受控的負荷可以被增加到一個極端的水平,並突破它,從而修復體系的瓶頸或薄弱的地方 3. 系統調優 重複執行測試,驗證調整系統的活動得到了預期的結果,從而改進效能 4. 檢測系統中的問題 長時間的測試執行可導致程式發生由於記憶體洩露引起的失敗,揭示程式中的隱含的問題或衝突 5. 驗證穩定性(resilience)可靠性(reliability) 在一個生產負荷下執行測試一定的時間是評估系統穩定性和可靠性是否滿足要求的唯一方法

0x2: 什麼是效能測試

效能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項效能指標進行測試。從目的來看,效能測試可以分為2種:

//這兩者可以結合進行 
1. 負載測試
通過負載測試,確定在各種工作負載下系統的效能,目標是測試當負載逐漸增加時,系統各項效能指標的變化情況
2. 壓力測試
壓力測試是通過確定一個系統的瓶頸或者不能接受的效能點,來獲得系統能提供的最大服務級別的測試

0x3: 評價一個系統的效能的指標有哪些

在每種不同的系統架構的實施中,開發人員可能選擇不同的效能測試實現方式,造成實際情況紛繁複雜。由於工程和專案的不同,所選用的度量,評估方法也有不同之處。不過仍然有一些通用的步驟幫助我們完成一個效能測試專案。步驟如下

1. 制定目標和分析系統
2. 選擇測試度量的方法
3. 學習的相關技術和工具
4. 制定評估標準
5. 設計測試用例
6. 執行測試用例
7. 分析測試結果

在本文中,我們將著重瞭解如下幾個維度的指標

1. 系統吞度量
2. 使用者併發量 
3. 網路上下行資料量
4. 客戶端-服務端TCP同時長連線數量

 

2. 系統吞度量

0x1: 系統吞度量要素

一個系統的吞度量(承壓能力)與很多因素(指標)緊密相關

1.資源利用率
這裡所謂的資源是對於系統中的一個抽象的概念,它包括很多方面
    1) reqeust對CPU消耗
    單個reqeust對CPU消耗越高,外部系統介面、IO影響速度越慢,系統吞吐能力越低,反之越高
    2) 記憶體負載
    系統對系統記憶體、vm虛擬記憶體、swap交換區的使用情況
    3) IO負載消耗
    系統在執行中常常會涉及到大量的磁碟讀寫操作
    磁碟有兩個重要的引數: Seek time、 Rotational latency。正常的I/O計數為:1000/(Seek time+Rotational latency)*0.75
    在此範圍內屬正常。當達到85%的I/O計數以上時則基本認為已經存在I/O瓶勁。理論情況下,磁碟的隨機讀計數為125、順序讀計數為225。對於資料檔案而言是隨機讀寫,日誌檔案是順序讀寫  

2.外部介面
一個系統會將系統內的功能封裝成介面(RESTFUL、SOAP)的形式向外部提供,這些外部介面和內部的程式碼處理邏輯是強關聯的

3.QPS/TPS(TPSTransactionsPerSecond)
QPS(TPS) = 併發數 / 平均響應時間
每秒鐘request/事務數量,它是軟體測試結果的測量單位,一個事務是指一個客戶機向伺服器傳送請求然後伺服器做出反應的過程。
事務可以從客戶端角度進行定義。如
    1) 一個登入的POST請求可定義為一個事務
    2) 一個檔案上傳下載的動作也可定義為一個事務
    3) 一組連續的請求操作也可定義一個事務
事務也可從伺服器端定義,如
    1) 執行一個資料庫事務
    2) 執行一段儲存過程
    3) 執行一個伺服器請求等。
理解了事務,再理解TPS,TPS需要結合效能測試場景來說明:
    1) 單體測試
        1.1) 本次測試只測登入這一功能,便於分析和尋找瓶頸
        1.2) 也可做併發測試
        TPS=總事務數/總時間(秒)
    2) 混合測試
    多種模組一起進行測試,更符合真實場景,便於對伺服器的整體處理能力進行評估
    TPS=單個事務的TPS總和。
大多數情況下,我們使用加權協函式平均方法來計算客戶機的得分,測試軟體就是利用客戶機的這些資訊使用加權協函式平均方法來計算伺服器端的整體TPS得分

4.併發數
系統同時處理的request/事務數

5.響應時間
用於測量完成一個特定請求需要花費多少時間。它是一個非常重要的度量值因為它是使用者體驗的一個指數。儘管這樣,你必須確保你理解你測量的是什麼
    1) 系統級的反應時間
    2) 元件級的反應時間
它們是完全不同的,因為系統級包括像佇列時間這樣的變數是差別很大的
值得注意的是,響應時間同時也是不容易測量的度量值,因為它比其它的度量值更容易變化。因此你必需瞭解反應時間的分佈。如果應用對你大部分使用者的反應時間是2秒鐘,而對10%使用者的反應時間卻是10秒鐘,在這種情況下,你必須
知道這個反應時間的分佈,才能精確地評估該問題和解決它。這就要測量它們的反應時間並且得到它們的標準偏差,理想的情況是用一個柱狀圖把反應時間的分佈顯示出來

Relevant Link:

http://www.360doc.com/content/10/1022/17/691214_63081271.shtml
http://www.cnblogs.com/argb/p/3448649.html
http://www.ha97.com/5095.html

 

3. 網路上下行資料量

4. 客戶端-服務端TCP同時長連線數量

 

5. 系統效能的指標計算

0x1: 響應時間: 對請求作出響應所需要的時間

1. 網路傳輸時間: N1+N2+N3+N4
2. 應用伺服器處理時間: A1+A3
3. 資料庫伺服器處理時間: A2
4. 響應時間=N1+N2+N3+N4+A1+A3+A2

0x2: 併發使用者數的計算公式

1. 系統使用者數: 系統額定的使用者數量,如一個OA系統,可能使用該系統的使用者總數是5000個,那麼這個數量,就是系統使用者數
2. 同時線上使用者數: 在一定的時間範圍內,最大的同時線上使用者數量
3. 同時線上使用者數 = 每秒請求數RPS(吞吐量) + 併發連線數 + 平均使用者思考時間
4. 平均併發使用者數的計算: C = nL / T
    1) C是平均的併發使用者數
    2) n是平均每天訪問使用者數(login session)
    3) L是一天內使用者從登入到退出的平均時間(login session的平均時間)
    4) T是考察時間長度(一天內多長時間有使用者使用系統)
5. 併發使用者數峰值計算: C^約等於C + 3*根號C
其中C^是併發使用者峰值,C是平均併發使用者數,該公式遵循泊松分佈理論

0x3: 吞吐量的計算公式

1. 從業務角度看
吞吐量可以用:
    1) 請求數/2) 頁面數/3) 人數/天或處理業務數/小時等單位來衡量
2. 從網路角度看,吞吐量可以用:
    1) 位元組/秒來衡量
3. 對於互動式應用來說,吞吐量指標反映的是伺服器承受的壓力,他能夠說明系統的負載能力

以不同方式表達的吞吐量可以說明不同層次的問題,例如

1. 以位元組數/秒方式可以表示數要受網路基礎設施、伺服器架構、應用伺服器制約等方面的瓶頸
2. 已請求數/秒的方式表示主要是受應用伺服器和應用程式碼的制約體現出的瓶頸

0x4: 思考時間的計算公式

Think Time,從業務角度來看,這個時間指使用者進行操作時每個請求之間的時間間隔,而在做新能測試時,為了模擬這樣的時間間隔,引入了思考時間這個概念,來更加真實的模擬使用者的操作。
在吞吐量這個公式中F=VU * R / T說明吞吐量F是VU數量、每個使用者發出的請求數R和時間T的函式,而其中的R又可以用時間T和使用者思考時間TS來計算:R = T / TS
下面給出一個計算思考時間的一般步驟:

1. 首先計算出系統的併發使用者數
C=nL / T F=R×C

2. 統計出系統平均的吞吐量
F=VU * R / T R×C = VU * R / T

3. 統計出平均每個使用者發出的請求數量
R=u*C*T/VU

4. 根據公式計算出思考時間
TS=T/R

 

6. IO負載

IO負載在大多數情況下指的是系統對磁碟的訪問頻率

 

0x1: 系統級IO監控

iostat -xdm 1

1. rrqm/s: 每秒進行 merge 的讀運算元目。即 rmerge/s
1. wrqm/s: 每秒進行 merge 的寫運算元目。即 wmerge/s
3. r/s: 每秒完成的讀 I/O 裝置次數。即 rio/s
4. w/s: 每秒完成的寫 I/O 裝置次數。即 wio/s
5. rsec/s: 每秒讀扇區數。即 rsect/s
6. wsec/s: 每秒寫扇區數。即 wsect/s
7. rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組 
8. wkB/s: 每秒寫K位元組數。是 wsect/s 的一半 
9. avgrq-sz: 平均每次裝置I/O操作的資料大小(扇區)
10. avgqu-sz: 平均I/O佇列長度
11. await: 平均每次裝置I/O操作的等待時間(毫秒)
12. svctm: 平均每次裝置I/O操作的服務時間(毫秒) 
13. %util: 一秒中有百分之多少的時間用於 I/O 操作,即被io消耗的cpu百分比

0x2: 程式級IO監控

當前系統哪些程式在佔用IO?百分比是多少?佔用IO的程式是在讀?還是在寫?讀寫量是多少?

iotop、pidstat
block_dump、iodump
iotop.stp

0x3: 業務級IO監控

當前程式某時間內,在業務層面讀寫了哪些檔案(read, write)?讀寫次數是多少(read、write的呼叫次數)?讀寫資料量多少(read、write的byte數)?

ioprofile

0x4: 檔案級IO監控

檔案級IO監控可以配合/補充"業務級和程式級"IO分析。檔案級IO分析,主要針對單個檔案。回答當前哪些程式正在對某個檔案進行讀寫操作

lsof、ls /proc/pid/fd、inodewatch.stp

Relevant Link:

http://www.cnblogs.com/peida/archive/2012/12/28/2837345.html
http://itindex.net/detail/46239-linux-io-%E5%88%86%E6%9E%90 

 

Copyright (c) 2014 LittleHann All rights reserved

 

相關文章