系統吞吐量(TPS)、用戶并發量、性能測試、IO負載學習
目錄
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
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