學習網站:
http://www.51testing.com/html/35/128935-243090.html
http://www.51testing.com/html/39/n-3711439-2.html
一、性能測試指標
性能測試是通過測試工具模擬多種正常、峰值及異常負載條件來對系統的各項性能指標進行測試。
目的:驗證軟件系統是否能夠達到用戶提出的性能指標,發現系統中存在的性能瓶頸並加以優化。
性能指標分為兩個方面:
系統指標(與用戶場景和需求相關指標)
資源指標(與硬件資源消耗相關指標)
系統指標說明
1.響應時間、平均響應時間
對一個請求做出響應所需要的時間
響應時間=網絡響應時間+應用程序響應時間=(N1+N2+N3+N4)+(A1+A2+A3)
平均響應時間:所有請求花費的平均時間
如:如果有100個請求,其中 98 個耗時為 1ms,其他兩個為 100ms
平均響應時間: (98 * 1 + 2 * 100) / 100.0 = 2.98ms,但是,2.98ms並不能反映服務器的整體效率,因為98個請求耗時才1ms,引申出百分位數
百分位數:以響應時間為例,指的是 99% 的請求響應時間,都處在這個值以下,更能體現整體效率。
2.並發用戶數
並發主要是針對服務器而言,在同一時刻與服務器進行交互(指向服務器發出請求)的在線用戶數。
在線用戶:指某段時間內,用戶訪問系統的用戶數,如多個用戶在瀏覽網頁,但沒有對同時對服務器進行數據請求,需要與並發用戶數區分開。
並發用戶數C,計算公式C=nL/T
n:每天訪問系統的用戶數
L:在線用戶從登陸到退出的時間
T:用戶每天使用系統大概多長時間
峰值C1,即最大並發數,計算公式C1=C+³√C
注:理解最佳並發用戶數和最大並發用戶數
看了《LoadRunner沒有告訴你的》之理發店模式,對最佳並發用戶數和最大的並發用戶數的理解小小整理了一下。
所謂的理發店模式,簡單地闡述一下,一個理發店有3個理發師,當同時來理發店的客戶有3個的時候,那么理發師的資源能夠有效地利用,這時3個用戶數即為最佳的並發用戶數;當理發店來了9個客戶的時候,3個客戶理發,而6個用戶在等待,3個客戶的等待時間為1個小時,另外的3個客戶的等待時間為2小時,客戶的最大忍受時間為3小時包括理發的1個小時,所以6個客戶的等待時間都在客戶的可以承受范圍內,故9個客戶是該理發店的最大並發用戶數。具體的隨着並發用戶數的增加,響應時間,吞吐量,資源利用情況如下圖所示:
Light Load(較輕壓力)-----最佳用戶數(資源利用最高)---(較重壓力,系統可以持續工作,但用戶等待時間較長,滿意度會下降)-----Heavy Load-------最大並發用戶數--------Buckle Zone(用戶無法忍受而放棄請求)
最佳並發用戶數:當系統的負載等於最佳並發用戶數時,系統的整體效率最高,沒有資源被浪費,用戶也不需要等待
最大並發用戶數:系統的負載一直持續,有些用戶在處理而有的用戶在自己最大的等待時間內等待的時候
我們需要保證的是:
(1)最佳並發用戶數需大於系統的平均負載
(2)系統的最大並發用戶數要大於系統需要承受的峰值負載
怎么理解這兩句話呢?
(1)系統的平均負載:在特定的時間內,系統正在處理的用戶數和等待處理的用戶數的總和
如果系統的平均負載大於最佳並發用戶數,則用戶的滿意度會下降,所以我們需要保證系統的平均負載小於或者等於最佳並發用戶數
(2)峰值:指的是系統的最大能承受的用戶數的極值
只有最大並發用戶數的大於系統所能承受的峰值負載,才不會造成等待空間資源的浪費,導致系統的效率低下
3.吞吐量、吞吐率
衡量網絡性能的重要指標
吞吐量:網絡傳輸的數據量(處理客戶的請求數)
吞吐率:單位時間(可以是秒/分/時/天)內網絡成功傳輸的數據量,如請求數/秒、頁面數/秒
4.事務,TPS(Transaction Per Second)每秒事務數
事務:可以看作是一個動作或是一系列動作的集合,例如登錄,從登錄開始到登錄結束為一個事務。
TPS:衡量系統處理事務或交易的能力,即服務器對客戶請求的能力,每秒處理的事務數,一般在LoadRunner上使用,設置事務,然后統計單位時間內系統可以成功完成多少個定義的事務。
5.點擊量、點擊率(Hits Per Second)
點擊數:指Web Server收到的HTTP請求數。
點擊率:單位時間每秒用戶向Web Server提交的HTTP請求數。
區分鼠標點擊數:如請求一個網頁,網頁含有3張圖片,向Web Server請求的點擊數:1+3=4,而鼠標的一次點擊就可以訪問網頁,點擊數只有1次
資源指標說明
1.硬件性能指標:CPU,內存Memory,磁盤I/O(Disk I/O),網絡I/O(Network I/O)
CPU:主要解釋計算機指令以及處理計算機軟件中的數據
Linux系統中top命令查看CPU的使用率
CPU的利用率(<=75%)有:user(用戶使用),sys(系統調用<=30%),wait(等待<=5%),idle(空閑)
當user消耗高時,通過top命令查看哪個用戶進程占用cpu的使用
user消耗過高的原因可能有:
(1)代碼問題。如代碼中耗時循環中不加sleep,即例如while的死循環中,沒有加sleep時間,導致沒有空余的時間將cpu的控制權給其他的進程,一直陷入該死循環中,cpu得不到休息,所以usr的消耗過高,則cpu的消耗高
(2)gc頻繁。gc則為垃圾回收,由於垃圾回收也是需要大量的計算,也消耗cpu,所以當gc頻繁時也導致usr用戶空間的消耗也過高,cpu消耗過高
當sys消耗高時,通過top命令查看系統調用資源的情況
sys消耗過高的原因可能有:
(1)上下文切換頻繁。上下文切換發生的情況有:中斷處理,多任務處理,用戶狀態改變。
中斷處理,當cpu停止處理當前的進程轉而處理中斷請求的進程時發生上下文切換。多任務處理則為有多個進程請求cpu的處理,進程的數量多於cpu的核數,則分配進程時間片,根據時間片處理進程,意味着會強制停止一個進程而去處理另一個進程,形成頻繁的上下文切換。用戶狀態改變則為user狀態與sys狀態的改變。
wait較高時,即等待的進程占比高則可以考慮是否磁盤讀寫,磁盤瓶頸問題, 等待的進程較多時,cpu無論如何切換都是切換到等待的進程,導致cpu一直在頻繁切換等待的線程而利用率較低
內存:與cpu溝通的橋梁,計算機中所有程序的運行都在內存中進行,內存分為物理內存、頁面交換(Paging),SWAP內存(虛擬內存)
頁面交換:當物理內存即實際的內存滿了的時候,將物理內存中不常用的進程調出存儲到虛擬內存中,以緩解物理內存空間的壓力,所以當物理內存與虛擬內存的數據交換頻繁的時候,這時候就要關注下內存的性能情況。
SWAP內存:為進程分配虛擬的內存空間,即調用硬盤的空間作為內存使用。
內存的性能分析是又可用內存與頁面交換來分析的,可用內存使用占70%-80%為上限,當超出這個數值,內存性能情況就比較危險,而且即使可用內存使用不超過80%的數值時,頁面交換比較頻繁時,也是要關注下內存情
一般物理內存即使是滿內存也不能代表內存出現問題,主要是看虛擬內存swap,虛擬內存應該<=70%,大於則可以考慮是否內存問題或者內存泄漏
磁盤吞吐量,指單位時間內通過磁盤的數據量。主要關注磁盤的繁忙率,如果高於70%,則磁盤瓶頸
網絡吞吐量,指單位時間內通過網絡的數據量,當吞吐量大於網路設備或鏈路最大傳輸能力,即帶寬時,則應該考慮升級網絡設備或者增加帶寬,Linux命令netstate
網絡IO也有可能出現終止連接失敗。例如當服務端出現大量的TIME_WAIT,見以下TCP終止連接的第4個步驟,在主動發起關閉連接方接收到結束符FIN時狀態變為TIME_WAIT,這時在服務端發現大量的TIME_WAIT,意味着關閉連接是由服務端發起的。
問?什么情況是由服務端發起關閉連接?答:在用戶端的應用程序忘記關閉連接
另外如果在服務端發現大量狀態CLOSE_WAIT,則說明第二次關閉回不去,也就是TCP關閉連接的第三個步驟沒有執行,停留在CLOSE_WAIT的狀態,瀏覽器如果這時發起請求則會返回超時連接,因為服務端這邊一直無法進行第二次關閉,將結束符返回去給用戶端。
注:普及TCP連接的三次握手,終止連接的四次握手
TCP三次握手連接:
(1)用戶端發送SYN給服務器,用戶端的狀態為SYN_SEND
(2)服務端接收到后發送ACK給用戶端,服務端的狀態為SYN_RECV
(3)用戶端接收到服務端發送過來的后發送了ACK給服務端,用戶端的狀態變為Estabilished
TCP終止連接:
(1)用戶端的應用主動發起關閉連接,即應用調用close發送FIN給服務端
(2)服務端接收到FIN后發送ACK給用戶端,服務端的狀態變為CLOSE_WAIT
(3)服務端發送ACK給用戶端的同時也將FIN作為一個文件結束符傳遞給接收端應用程序
(4)用戶端的應用程序接收到FIN后將調用close關閉它的套接字,確認FIN,這時用戶端的狀態變為TIME_WAIT
(5)用戶端發送ACK回執給服務端,連接終止
2.中間件:常用的中間件例如web服務器Tomcat,Weblogic web服務器,JVM(java虛擬機),ThreadPool線程池,JDBC數據驅動
注:http服務器和web服務器與應用服務器的差別是一個存儲靜態網頁的服務器,一個是存儲css,js等動態加載網頁的服務器,而tomcat則屬於應用服務器
注:對中間件例如對服務器的性能測試,需要將監控的jmeter-server的文件下載在服務端上,然后開啟即可監控被測服務器的性能,或者將監控的軟件下載在被測服務器上,遠程啟動監控軟件等
3.數據庫指標
應關注SQL,吞吐量,緩存命中率,連接數等,則是關注sql語句執行時間,以微妙為單位,吞吐量TPS,緩存命中率應>=95%
注:對數據庫的性能測試通過jemter利用批量的sql語句對數據庫進行操作,從而測試數據庫的性能,前提是需要將jdbc的驅動加載在測試計划添加的驅動文件中,然后添加jdbc的前置處理器和jdbc的請求sample。
4.JVM,java虛擬機,為使java的代碼可以編譯運行在不同的平台上順暢,仿真模擬各種計算機來實現
GC:自動內存管理程序,被引用的對象保存在內存中,當對象不被引用時則釋放。關注的參數有Full GC完全java虛擬機垃圾部分回收頻率
5.前端指標
前端應該關注頁面展示,即首次顯示時間,頁面數量,頁面大小,網絡startRender,firstRender等
注:關注前端的性能與后端的性能的不同點在於,前端是每個用戶的直觀的感受,以及前端頁面的加載元素耗費時間給予用戶的感受,而后端的性能關注點在於多用戶使用系統時,服務器是否能夠承受或者服務器的處理能力如何,能否以較好的響應時間響應。
6.Load:系統平均負載,特定時間間隔內運行進程數,Load與cpu核數一致