【性能】性能分析原則
性能分析
不合標準的應用程序性能會產(chǎn)生軟件或網(wǎng)絡(luò)問題。為確保軟件滿足或超過設(shè)計的期望值,有必要分析應用程序的性能以發(fā)現(xiàn)潛在的問題。這個過程被稱為“性能分析”。它包括檢查應用程序以確保每個組件有效地工作,并根據(jù)設(shè)計密切注視處理器的使用、網(wǎng)絡(luò)和系統(tǒng)服務、存儲和輸入/輸出(I/O)。
響應時間的2/5/8原則
Bug分布的2/8原則
80%的bug分布在20%的模塊里
業(yè)務分布的2/8原則
80%的業(yè)務量在20%的時間里完成
二八原則計算的結(jié)果并非在線并發(fā)用戶數(shù),是系統(tǒng)要達到的處理能力(吞吐量),初學者容易被誤導,那這這個數(shù)據(jù)就去設(shè)置并發(fā)數(shù),這是錯誤滴。
如果你的系統(tǒng)性能要求更高,也可以選擇一九原則或更嚴格的算法,二八原則比較通用,一般系統(tǒng)性能比較接近這個算法而已,大家應該活用。
理發(fā)店模型
模型假設(shè)
場景構(gòu)建
場景1
理發(fā)店內(nèi)只有1位顧客
有1名理發(fā)師為他提供服務,另外2位等著或打雜幫忙。1小時后,兩位顧客剪完頭發(fā)出門 在這1個小時里,整個理發(fā)店只服務了1位顧客,這位顧客花費在這次剪發(fā)的時間是1小時。
理發(fā)店內(nèi)同時有2位顧客
同時有2名理發(fā)師在為顧客服務,另外1位等著或打雜幫忙。1小時后,兩位顧客剪完頭發(fā)出門 在這1小時里,整個理發(fā)店服務了兩位顧客,這兩位顧客花費在剪發(fā)的時間均為1小時
理發(fā)店內(nèi)同時有3位顧客
同時有3名理發(fā)師在為顧客服務。1小時后,三位顧客剪完頭發(fā)出門
在這1小時里,整個理發(fā)店服務了三位顧客,這三位顧客花費在剪發(fā)的時間均為1小時
場景總結(jié):
在理發(fā)店同時服務的顧客數(shù)量從1位增加到3位的過程中,隨著顧客數(shù)量的增多,理發(fā)店的整體工作效率在提高,而且每位顧客在理發(fā)店內(nèi)所呆的時間并未延長。
當然,可以假設(shè)當只有1位顧客和2位顧客時,空閑的理發(fā)師可以幫忙打雜,使得其他理發(fā)師的工作效率提高,并使每位顧客的剪發(fā)時間小于1小時 不過即使根據(jù)這個假設(shè),雖然隨著顧客數(shù)量的增多,每位顧客的服務時間有所延長,但是這個時間始終還被控制在顧客可接受的范圍之內(nèi),并且顧客是不需要等待的。
場景2
隨著理發(fā)店的生意越來越好,顧客也越來越多,出現(xiàn)新的場景
假設(shè)有一次顧客A、B、C剛進理發(fā)店準備剪發(fā),外面一推門又進來了顧客D、E、F
因為A、B、C三位顧客先到,所以D、E、F三位只好坐在長板凳上等著
1小時后,A、B、C三位剪完頭發(fā)走了,他們每個人這次剪發(fā)所花費的時間均為1小時??墒荄、E、F三位就沒有這么好運,因為他們要先等A、B、C三位剪完才能剪,所以他們每個人這次剪發(fā)所花費的時間均為2小時——包括等待1小時和剪發(fā)1小時。
通過上面這個場景我們可以發(fā)現(xiàn),對于理發(fā)店來說,都是每小時服務三位顧客——第1個小時是A、B、C,第二個小時是D、E、F;但是對于顧客D、E、F來說,“響應時間”延長了。
場景3
假設(shè)這次理發(fā)店里一次來了9位顧客,這9位顧客中有3位的“響應時間”為1小時,有3位的“響應時間”為2小時(等待1小時+剪發(fā)1小時),還有3位的“響應時間”為3小時(等待2小時+剪發(fā)1小時)——已經(jīng)到達用戶所能忍受的極限。假如在把這個場景中的顧客數(shù)量改為10,那么我們已經(jīng)可以斷定,一定會有1位顧客因為“響應時間”過長而無法忍受,最終離開理發(fā)店走了。(其實這種場景在我們生活中也是非常常見的一種情況)
上面的場景如何與性能測試掛鉤呢?

性能測試曲線模型是一條隨著測試時間不斷變化的曲線,與服務器資源,用戶數(shù)或其他的性能指標密切相關(guān)的曲線。
一般的性能測試曲線圖主要分為三個區(qū)域,分別是:
light load(輕壓力區(qū))
heavy load(重壓力區(qū))
Buckle Zone
圖中的三條曲線,分別代表:
Utilization(資源利用率,指軟硬件資源)
Throughput(吞吐量,即單位時間內(nèi)處理請求的數(shù)量)
Response Time(響應時間)
圖中坐標軸的橫軸從左到右表示并發(fā)用戶數(shù)(Number of Concurrent Users)的不斷增長。
分析:
資源利用率在第一區(qū)域穩(wěn)定增長,在第二區(qū)域小幅增長,在第三區(qū)域呈直線,表示飽和。
響應時間隨著并發(fā)用戶數(shù)的增加,在前兩個區(qū)域基本平穩(wěn),小幅遞增,在第三個區(qū)域急速遞增,產(chǎn)生拐點。
同時,吞吐量隨著并發(fā)用戶數(shù)的增加,請求增加,在第一區(qū)域基本穩(wěn)定上升,在第二區(qū)域處理達到頂點,隨后開始下降。
當系統(tǒng)的負載等于最佳并發(fā)用戶數(shù)時,整體效率最高,也沒有資源被浪費,用戶也不需要等待;當系統(tǒng)負載處于最佳并發(fā)用戶數(shù)和最大用戶并發(fā)數(shù)之間時,系統(tǒng)可以繼續(xù)工作但用戶的等待時間延長;當系統(tǒng)負載大于最大并發(fā)用戶數(shù)時,用戶滿意度基本為零,甚至放棄訪問。
根據(jù)區(qū)域交界處,又衍生兩個概念:
最佳并發(fā)用戶數(shù)
The Optimum Number of Concurrent Users
Light Load和Heavy Load 兩個區(qū)域交界處的并發(fā)用戶數(shù)
最大并發(fā)用戶數(shù)
The Maximum Number of Concurrent Users
Heavy Load和Buckle Zone兩個區(qū)域交界處的并發(fā)用戶數(shù)
性能拐點
1、對一個基本的請求做并發(fā)測試,看是否能達到tps=1000,或者找到tps拐點。
2、設(shè)置線程數(shù)為1,循環(huán)數(shù)為1,查看Throught為多少(假如是170),計算下如果想要達到1000的話大概需要多少線程數(shù),1000/170,大約為6。

3、將線程數(shù)設(shè)置為6,對請求加一個Throught shaping timer ,設(shè)置如下:

4、將Tracactions per second的顆粒度調(diào)低點(settings)
5、運行,查看tps
性能測試行業(yè)常用的性能指標表示法

響應時間(RT response time)
吞吐量(Throughput)
并發(fā)用戶數(shù)
QPS每秒查詢率(Query Per Second)
TPS每秒執(zhí)行的事務數(shù)量(throughput per second)
估算QPS峰值
并發(fā)數(shù)
首先,理解三個用戶數(shù)的概念:
系統(tǒng)用戶數(shù)、在線用戶數(shù)、并發(fā)用戶數(shù)
系統(tǒng)用戶數(shù)就是一個系統(tǒng)中所有的注冊用戶數(shù)。eg. 當前微信中的所有注冊用戶數(shù);在線用戶數(shù)是當前登錄系統(tǒng)的用戶數(shù),eg.當前登錄微信的總用戶數(shù) (均為在線狀態(tài),不管該用戶做什么操作);并發(fā)用戶數(shù)是指對Server產(chǎn)生壓力的用戶數(shù),eg.當前微信所有登錄用戶中,正在進行操作的用戶數(shù)(僅指對Server產(chǎn)生壓力的操作)
我們測試時僅關(guān)注并發(fā)用戶數(shù),一般,需求采集人員會將線上的并發(fā)用戶數(shù)根據(jù)日志或工具分析統(tǒng)計出。測試時,要以性能測試需求為準,此外,并發(fā)操作也包含多種情況 ,如所有用戶同時進行購買或支付操作;或多個用戶同時發(fā)出多個不同請求,如加入購物車、刪除商品、增減數(shù)量、支付、退款等操作。
響應時間
先看一個請求從發(fā)出到用戶看到結(jié)果的過程:用戶發(fā)送一個請求后,通過網(wǎng)絡(luò)傳輸、DNS解析等步驟到達Server端后,Server通過各種算法處理,將結(jié)果通過網(wǎng)絡(luò)傳輸返回到Client,Client要經(jīng)過解析渲染等步驟,最后才呈現(xiàn)給用戶。
通過以上流程可知,響應時間的計算模式:響應時間=請求傳輸時間+Server處理時間+響應傳輸時間+前端解析渲染時間。
由此可見,在工作中,一方面響應時間要根據(jù)不同業(yè)務及用戶的具體要求而定;另一方面分析結(jié)果時要注意當前的業(yè)務模型(如前端性能測試與服務器性能測試)
資源利用率
關(guān)于資源利用率初期了解以下幾個重要指標即可:
CPU
對于CPU都不陌生,簡言之,是用來處理\判斷事務的,CPU一般有系統(tǒng)CPU與用戶CPU,前者是 處理系統(tǒng)占用的資源 ;而后者是處理應用程序占用的資源 。
網(wǎng)絡(luò)
即網(wǎng)絡(luò)傳輸?shù)牧髁?,測試過程中對網(wǎng)絡(luò)的監(jiān)控以,以分析是否存在瓶頸。
IO
即,Input/Output,輸入/輸出。關(guān)注與磁盤的交互頻率等
內(nèi)存
即數(shù)據(jù)存儲區(qū)域。一般讀數(shù)據(jù)時從內(nèi)存中讀取要比硬盤讀取快很多 ,但需要關(guān)注的是內(nèi)存溢出或內(nèi)存泄漏問題。
隊列
屬于數(shù)據(jù)結(jié)構(gòu)的概念了 ,是一種線性表,可以在隊列前刪除,在隊尾處進行插入。測試過程中,如果發(fā)現(xiàn)隊列越來越長,很可能會發(fā)生阻塞問題。
