我們經(jīng)常需要對程序進行壓測段直,怎么壓才合適呛谜?壓到什么樣才說明應用達到了性能瓶頸?用什么指標來衡量才合適荞下?一些指標異常又說明了什么伶选?我們又該怎么樣去查問題?這些都是壓測時我們需要關注的尖昏。
按照大項劃分仰税,個人將性能指標分為下面幾個大項:
一、基本性能指標 QPS 和 RT
這是測試過程中最基本的指標抽诉,也是我們主要需要關注的兩項陨簇。QPS 是指系統(tǒng)每秒處理的請求個數(shù)(query per second)。RT 指一個請求發(fā)出后系統(tǒng)的響應時間(reaction time)迹淌。區(qū)別下 QPS 和 TPS(Transactions per Second)河绽,他倆很像但是不是一個東西己单。TPS 是指每秒處理的事務數(shù),一個事務是指一個客戶機向服務器發(fā)送請求然后服務器做出反應的過程耙饰。舉個例子比如某個接口里面有很多項操作纹笼,這時往往用 QPS 是不準確的,因為準確來說 QPS 針對的是 Query苟跪,是詢問廷痘,如單獨的數(shù)據(jù)庫讀甚至是寫都可以叫一個詢問,但當接口里有多個操作件已,本質(zhì)上調(diào)用一次產(chǎn)生一次事務笋额,同時里面有許多 Query。所以 QPS 往往會比 TPS 大些拨齐。如果針對應用來說我們調(diào)用一次內(nèi)部邏輯又不可見不知道里面有多少操作鳞陨,這時 TPS 和 QPS 常常區(qū)分不開的,建議用 TPS 來衡量好些瞻惋。
這里還要提到一個重要概念:最佳線程數(shù)量厦滤,是指剛好消耗完服務器瓶頸資源的臨界線程數(shù)。 最佳線程數(shù)和 QPS歼狼、RT 是有一定關系的掏导,這個線程數(shù)需要在壓測過程中不斷地去調(diào)整(一般從小到大來調(diào),剛開始可能10個)羽峰,努力去接近我們設定預期的性能測試極限趟咆。這個線程數(shù)和請求量正比關系,但是一定不要認為線程數(shù)少請求量就小梅屉。一般線程數(shù)設置8-10個左右值纱,QPS 就可以達到 500 多了。舉個例子坯汤,一個線程一秒內(nèi)可以發(fā)送 N 個請求其實也是固定的虐唠,那增加我們的線程個數(shù),比如現(xiàn)在我們有 M 個線程惰聂,那每秒理論上可以發(fā) M*N 個請求疆偿,不考慮應用瓶頸,那應用每秒 QPS 就可以達到 M*N搓幌,當然有瓶頸情況下 QPS 到一定程度就不會再提升了杆故,因為一個應用每秒能處理的請求就那么多,每處理一個請求響應時間 RT 是有限的溉愁,當不斷請求過來產(chǎn)生堆積处铛,響應時間上升了,還會導致 QPS 的下降。
先看看這三者的關系撤蟆,QPS = 1000*線程數(shù)量/RT篙贸。QPS 單位是秒,RT 單位是毫秒枫疆,所以有一個單位換算分子乘以了1000。QPS 和 RT 成反比敷鸦,當超過最佳線程數(shù)息楔,會導致資源競爭加劇,同時響應時間也會增加扒披,QPS 下降值依。
那么問題來了,如何找到最佳線程數(shù)碟案?最土但是最實用的方法是愿险,逐步壓測,不斷地調(diào)整線程數(shù)來觀察系統(tǒng)的負載价说。
二辆亏、數(shù)據(jù)庫指標
很多應用的瓶頸是在數(shù)據(jù)庫指標。比如連接數(shù)鳖目、數(shù)據(jù)庫的操作監(jiān)控等等扮叨。
三、性能指標
性能指標是針對性能機器的领迈,最佳線程數(shù)調(diào)整的監(jiān)控項就是根據(jù)這個指標來的彻磁。這底下有很多東西,羅列一下:CPU使用率狸捅、JVM堆棧使用情況衷蜓、GC/FGC 次數(shù)、Load指標尘喝、網(wǎng)絡延時磁浇。
3.1 CPU 使用率
一般性能測試指標,CPU 使用率小于 75% 比較合適瞧省。通過指令:cat /proc/stat 可以查看扯夭。第一行CPU是所有CPU數(shù)據(jù)總和,CPU0~3表示各個CPU數(shù)據(jù)鞍匾。其中第一列為從系統(tǒng)啟動開始累計到當前時間交洗,用戶態(tài)的CPU時間(單位:jiffies,1 jiffies = 0.01秒)橡淑。
3.2 JVM 堆棧使用情況
對于我們的應用來說构拳,一般會配置 JVM 的,所以對于應用來說,看機器的整體內(nèi)存是沒有意義的置森,我們更要關注的是堆棧的使用情況斗埂,關注點在已用堆信息。
3.3 GC / FGC 次數(shù)
在性能測試過程中不能出現(xiàn)因為FGC 的產(chǎn)生導致響應時間急劇升高的現(xiàn)象凫海,否則壓測是不正確的呛凶。盡量保證 FGC 的出現(xiàn)次數(shù)是0,如果出現(xiàn)看看它的運行時間行贪,要確保是 FGC 產(chǎn)生運行時間足夠短漾稀,否則就可以提Bug了。GC 產(chǎn)生是比較正常的建瘫,也要確保它的產(chǎn)生時間保持在比較低的水平崭捍。
3.4 Load 指標
Load 是 CPU 的負載,它所包含的信息不是 CPU 的使用率狀況啰脚,二是在一段時間內(nèi) CPU 正在處理以及等待CPU處理的進程數(shù)之和的統(tǒng)計信息殷蛇,也就是CPU使用隊列的長度的統(tǒng)計信息。一般測試時它的指標是Load<CPU的核數(shù)*2橄浓。通過指令:cat /proc/loadavg 可以查看粒梦。五個數(shù)字分別是一分鐘平均負載,5分鐘內(nèi)平均負載荸实,15分鐘內(nèi)平均負載谍倦,采樣時刻運行隊列的任務數(shù)目,系統(tǒng)中活躍任務數(shù)目泪勒,最大 pid 值(包括線程)昼蛀。
3.5 網(wǎng)絡延時
常用應用服務器ping數(shù)據(jù)庫,看看數(shù)據(jù)庫延時是多少圆存。
四叼旋、整體測試指標
RT(Response Time)<= 200ms,根據(jù)業(yè)務有所不同沦辙,只讀的可能小于 10ms夫植。
Load 服務器負載 <= CPU Core
CPU <= 75%
壓測失敗率 <= 0.2%
此外還要關注下方法耗時。
作者:FlySheep_ly
鏈接:http://www.reibang.com/p/de1e9f56f61e
來源:簡書
著作權歸作者所有油讯。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權详民,非商業(yè)轉(zhuǎn)載請注明出處。