背景介紹
- 相信很多測(cè)試項(xiàng)目上现柠,很多都是身兼多職(既要做功能、自動(dòng)化弛矛、性能啥都要做)够吩;這次依據(jù)個(gè)人對(duì)壓測(cè)這塊的理解,分享一下壓測(cè)的思路丈氓。因?yàn)閭€(gè)人以前對(duì)壓測(cè)有很多誤區(qū)周循,所以在此分享下避免繼續(xù)入坑(不喜勿噴强法,如果還有理解誤區(qū)求指點(diǎn),我在來(lái)完善);
- 下面就講下入門級(jí)的愚見(jiàn):1、壓力測(cè)試重點(diǎn)關(guān)注點(diǎn)是什么湾笛?2饮怯、壓力測(cè)試怎么做?
一嚎研、壓力測(cè)試重點(diǎn)關(guān)注點(diǎn)是什么蓖墅?
1.1、因?yàn)榭次乙郧暗耐禄蛘攥F(xiàn)在測(cè)試朋友們get不到重點(diǎn)临扮,都是按照各公司現(xiàn)有的demo去做论矾,用jmeter配置線程數(shù)去壓。最后都是說(shuō)支持500并發(fā)杆勇、1000并發(fā)贪壳,把聚合報(bào)告的指標(biāo)撈出來(lái)再給個(gè)結(jié)論;但其中的對(duì)應(yīng)關(guān)系還是很茫然的蚜退。
1.2闰靴、先捋一下壓測(cè)的目的是什么:壓測(cè)主要目的是結(jié)合當(dāng)前服務(wù)資源以及當(dāng)前環(huán)境配置基礎(chǔ)下,對(duì)應(yīng)用接口在不同壓力場(chǎng)景下得出各指標(biāo)結(jié)果是否滿足實(shí)際應(yīng)用需求【所以要優(yōu)化性能指標(biāo)的話钻注,除從應(yīng)用接口的代碼邏輯和設(shè)計(jì)鏈路去優(yōu)化的話蚂且,還需要結(jié)合環(huán)境的配置(例:連接數(shù)、隊(duì)列值队寇、jvm配置等)以及本身的物理資源去出發(fā)膘掰;能調(diào)到最合理的、最充分的利用率那就是性能大咖了】佳遣;
1.3识埋、對(duì)“并發(fā)”名詞說(shuō)明:并發(fā)這個(gè)詞在項(xiàng)目中很容易混淆,所以在此先講解下這個(gè)詞;并發(fā)分為相對(duì)并發(fā)和絕對(duì)并發(fā)零渐;相對(duì)并發(fā)是指在一個(gè)時(shí)間段內(nèi)發(fā)生的事務(wù)(可理解跟tps掛鉤)窒舟,絕對(duì)并發(fā)是指在同一時(shí)刻發(fā)生的事情(可理解為跟線程數(shù)掛鉤,jmeter的“集合點(diǎn)”功能可以實(shí)現(xiàn)這種方式)诵盼;以下講的并發(fā)都是依據(jù)絕對(duì)并發(fā)來(lái)說(shuō)惠豺。
?所以首先列下重點(diǎn)關(guān)注點(diǎn),根據(jù)如下四點(diǎn)去判斷壓測(cè)是否達(dá)標(biāo)通過(guò):
1)风宁、TPS指標(biāo):
2)洁墙、響應(yīng)時(shí)間:
3)、出錯(cuò)率:
4)戒财、服務(wù)資源情況:
?下述分享個(gè)樣例:
【測(cè)試結(jié)果】:
1)热监、TPS拐點(diǎn)峰值:依據(jù)壓測(cè)結(jié)果,在90并發(fā)時(shí)達(dá)到峰值(2277筆/s)饮寞,而后續(xù)持續(xù)遞增并發(fā)數(shù)后TPS呈平穩(wěn)趨勢(shì)孝扛,即保持峰值在2200左右列吼;--【達(dá)到預(yù)期≥1557筆要求】
2)、接口響應(yīng)時(shí)間指標(biāo)((以負(fù)載并發(fā)截圖為準(zhǔn)):依據(jù)tps峰值下進(jìn)行并發(fā)苦始,平均響應(yīng)時(shí)間為63.83ms,95%百分位響應(yīng)時(shí)間為92ms寞钥;--【達(dá)到預(yù)期≤100ms要求】
3)、出錯(cuò)率:整個(gè)梯級(jí)壓測(cè)過(guò)程中出現(xiàn)0.29%異常情況陌选,經(jīng)核查為環(huán)境XXXX問(wèn)題受影響理郑,非業(yè)務(wù)邏輯或資源問(wèn)題,即忽略此錯(cuò)誤率柠贤;--【達(dá)到預(yù)期99.9%成功率要求】
4)香浩、服務(wù)資源消耗:整體服務(wù)資源利用正常,內(nèi)存及CPU利用平穩(wěn)無(wú)異常情況臼勉;TPS下降時(shí)cpu正常對(duì)等下降邻吭,壓測(cè)結(jié)束后資源也可正常釋放;--【符合預(yù)期,詳見(jiàn)報(bào)告鏈接】
2.1宴霸、先說(shuō)下TPS指標(biāo)方面:
1)囱晴、TPS是主要是為了測(cè)出拐點(diǎn)峰值,得出當(dāng)前服務(wù)環(huán)境下最大的事務(wù)處理量(例如上述得出2277筆/s)瓢谢;
2)畸写、TPS峰值達(dá)標(biāo)判斷:需要結(jié)合本身實(shí)際要求(例如上述-結(jié)合實(shí)際生產(chǎn)要求得出不小于1557筆),那我峰值已經(jīng)覆蓋預(yù)期要求氓扛,那TPS指標(biāo)就算滿足達(dá)標(biāo)了枯芬;
3)、TPS峰值不滿足或者需要達(dá)到更佳情況下:就要考慮怎么去調(diào)優(yōu)了采郎,主要方向:從業(yè)務(wù)代碼方面優(yōu)化千所、服務(wù)配置的優(yōu)化、再到物理資源的提升蒜埋;
4)淫痰、額外說(shuō)明:關(guān)于實(shí)際預(yù)期要求多少,這個(gè)是需要參考生產(chǎn)實(shí)際使用量有多少整份;目前普遍比較多的是有埋點(diǎn)功能待错,可以統(tǒng)計(jì)到調(diào)用量;再結(jié)合有一定參考價(jià)值的二八原則計(jì)算(指80%的業(yè)務(wù)量在20%的時(shí)間里完成烈评,另此公式不一定適合所有項(xiàng)目火俄,具體需要結(jié)合每個(gè)系統(tǒng)項(xiàng)目應(yīng)用場(chǎng)景);
2.2讲冠、響應(yīng)時(shí)間指標(biāo):
1)烛占、需結(jié)合要求衡量取哪個(gè)響應(yīng)時(shí)間,一般主要關(guān)注平均值和95%分位值;如果嚴(yán)謹(jǐn)一點(diǎn)的話可以以99%分位為準(zhǔn)(這樣情況下確保每個(gè)調(diào)用都能達(dá)標(biāo))忆家;
2)、響應(yīng)時(shí)間達(dá)標(biāo)判斷:首先先知道指標(biāo)要求是多少德迹,一般可以從產(chǎn)品經(jīng)理那給出或者下游調(diào)用方超時(shí)設(shè)置值為參考芽卿,這些都算指標(biāo)要求;另這塊一般都是和tps事務(wù)處理量 and 并行要求的(例如:上述相當(dāng)于說(shuō)在每秒tps不低于1557的時(shí)候,并且95%分位要小于100ms);
2.3胳搞、出錯(cuò)率:
1)卸例、出錯(cuò)率也是一個(gè)重點(diǎn)關(guān)注項(xiàng),如果都異常了肯定是不可接受的肌毅;另對(duì)整體的指標(biāo)可能要考慮是否有價(jià)值了筷转,但這塊肯定需要結(jié)合異常情況去分析,在給出結(jié)論(如在壓測(cè)過(guò)程報(bào)錯(cuò)悬而,有些業(yè)務(wù)層面上認(rèn)為是合理的呜舒。但往往比較容易忽略,其實(shí)可能隱藏很大的性能問(wèn)題):
2)笨奠、注意點(diǎn):當(dāng)整體壓測(cè)下出現(xiàn)小部分概率異常袭蝗,這個(gè)需要自身衡量下指標(biāo)是否有價(jià)值,因?yàn)槟且恍〔糠钟绊懻w指標(biāo)可能會(huì)很大(比如百分98都是在200毫秒左右般婆,百分之二因?yàn)楫惓?毫秒就響應(yīng)了到腥,導(dǎo)致整體指標(biāo)影響很大)
2.4、服務(wù)資源消耗:
1)蔚袍、服務(wù)資源主要關(guān)注施壓機(jī)(即請(qǐng)求方)和壓力機(jī)(被請(qǐng)求方)乡范,施壓機(jī)需要確保自身環(huán)境資源夠滿足(避免因自身請(qǐng)求方機(jī)器原因無(wú)法滿足設(shè)置場(chǎng)景,導(dǎo)致未壓出真實(shí)指標(biāo))啤咽;
2)晋辆、服務(wù)資源利用情況常規(guī)的需要重點(diǎn)關(guān)注下cpu(例如是互聯(lián)網(wǎng)產(chǎn)品cpu使用率應(yīng)該不能超50%,內(nèi)部使用的一般80%闰蚕;保證預(yù)期最大tps下栈拖,服務(wù)器還是很健康的)、內(nèi)存(需要關(guān)注應(yīng)用內(nèi)存没陡,如jvm的內(nèi)存變化涩哟,只關(guān)注服務(wù)器內(nèi)存意義不大),磁盤讀寫盼玄、網(wǎng)絡(luò)接收發(fā)送 -->>各資源消耗不合理的變化或者有較大的異常波動(dòng)需要再結(jié)合分析贴彼;
3)、這塊服務(wù)監(jiān)聽(tīng)的工具還是很多的埃儿,jmeter插件的探針工具也有的器仗,雖然不是很強(qiáng)大,勉強(qiáng)能用【插件下載1:jmeter-PerfMon服務(wù)監(jiān)聽(tīng);服務(wù)資源探針2:ServerAgent-2.2.1--提取碼:8888 】
二精钮、壓力測(cè)試怎么做?(以TPS為例)
常規(guī)的壓測(cè)大家基本都會(huì)做威鹿,這里講下另一種壓測(cè)方式,既通過(guò)梯度增壓方式去找出核心指標(biāo):TPS峰值
- 在jmeter中轨香,可以利用【插件下載:Stepping Thread Group】來(lái)做到遞增壓測(cè)忽你,直接在一次線程組中找出TPS峰值(詳解如下圖)
1.1、配置思路:
①臂容、上述第一點(diǎn)-->最高并發(fā)值:可預(yù)估一個(gè)較高的并發(fā)值科雳,確保在最高并發(fā)值內(nèi)找出tps峰值(如果在此預(yù)估配置下未找到tps拐點(diǎn),需設(shè)置更大值)脓杉;
②糟秘、上述第二點(diǎn)-->持續(xù)增壓(高度):遞增的并發(fā)數(shù)值需要更準(zhǔn)確一點(diǎn)的話,建議設(shè)置以最高并發(fā)值5-10%區(qū)間遞增(此處主要避免在遞增爬坡的時(shí)候出來(lái)了tps拐點(diǎn)峰值)球散;
③尿赚、上述第三點(diǎn)-->恒定并發(fā)量時(shí)間(長(zhǎng)度):此處的設(shè)置長(zhǎng)度(即時(shí)長(zhǎng)),如果確保要精確些可以設(shè)置時(shí)間久一點(diǎn)(這里的設(shè)置時(shí)長(zhǎng):確保tps是趨向平穩(wěn)狀態(tài)沛婴,如非平穩(wěn)狀態(tài)需設(shè)置更長(zhǎng)或者可能需要考慮其他因素)
1.2吼畏、TPS效果參考圖【插件下載:Transactions per Second】
①、確保已經(jīng)到tps峰值判別:即tps是曲線是橫向狀態(tài)(停止繼續(xù)上升了)或者tps拐點(diǎn)往下走嘁灯;
②泻蚊、tps峰值橫向一段時(shí)間的解釋:到峰值時(shí)是在現(xiàn)狀資源環(huán)境下,可最大處理事務(wù)量丑婿;橫向是后續(xù)持續(xù)增加處于最大隊(duì)列內(nèi)性雄,此時(shí)段響應(yīng)時(shí)間相對(duì)而言增加會(huì)更大(每個(gè)服務(wù)系統(tǒng)不一樣,具體需要對(duì)應(yīng)分析)羹奉;
1.3秒旋、附上-響應(yīng)時(shí)間插件【插件下載:ResponseTimesOverTime】
結(jié)尾語(yǔ):
1)、未放更多實(shí)際已做的壓測(cè)場(chǎng)景和圖片(因?yàn)樯婕靶畔踩魇茫愣模┣ㄉ福椭苯佑胘meter截些圖片做講解了;
2)耕挨、后續(xù)會(huì)持續(xù)更新细卧,在繼續(xù)完善并且補(bǔ)充負(fù)載、穩(wěn)定性方面的點(diǎn).現(xiàn)先收收尾筒占;
3)贪庙、此文章更多分享的是思路,主要對(duì)于入門級(jí)是怎么構(gòu)思去做壓測(cè)翰苫,而不至于直接茫然去壓止邮;
4)这橙、壓測(cè)還有一個(gè)核心點(diǎn),除了給出性能指標(biāo)外還要找出瓶頸點(diǎn)以及分析瓶頸問(wèn)題导披。而對(duì)于這塊需要對(duì)綜合技術(shù)認(rèn)知以及對(duì)業(yè)務(wù)整體架構(gòu)屈扎、鏈路要有全面的了解來(lái)支撐的;所以需要真正做起性能測(cè)試撩匕,還任重道遠(yuǎn)助隧,一步一個(gè)腳印來(lái)吧