tcp压测工具_【解决方案】性能压测及分析调优实践
【關(guān)鍵導(dǎo)讀】結(jié)合一次重保活動(dòng)的性能壓測(cè)需求,詳解了整體的性能測(cè)試策略及性能分析思路,并在實(shí)施過(guò)程中有效利用了網(wǎng)易易測(cè)的NPT性能測(cè)試平臺(tái)一站式完成了壓測(cè)場(chǎng)景設(shè)計(jì)、執(zhí)行、業(yè)務(wù)指標(biāo)監(jiān)控、性能指標(biāo)分析等活動(dòng),結(jié)合監(jiān)控找出了性能瓶頸并給出了相應(yīng)的性能優(yōu)化解決方案
0.背景說(shuō)明
A業(yè)務(wù)有大促活動(dòng),對(duì)B業(yè)務(wù)有依賴(lài),要求B業(yè)務(wù)對(duì)于X場(chǎng)景能夠持續(xù)穩(wěn)定支撐1.4w TPS 5min, 如此要對(duì)B業(yè)務(wù)進(jìn)行性能壓測(cè),完成對(duì)應(yīng)的性能需求。
1.性能測(cè)試策略
如下所示,接下來(lái)按照這個(gè)思路去分析下整個(gè)性能測(cè)試實(shí)踐的流程。
典型性能測(cè)試策略及流程1.1 性能需求指標(biāo)
容量指標(biāo):X場(chǎng)景支撐1.4W TPS 持續(xù)5min
1.2 性能模型建立
【業(yè)務(wù)模型】
涉及的場(chǎng)景包含A-》B-》C-》D共4個(gè)接口,按照真實(shí)業(yè)務(wù)分析流量比例為3:1:1:1
【監(jiān)控模型】
監(jiān)控對(duì)象 – 測(cè)試活動(dòng)中的所有服務(wù)器,測(cè)試機(jī)、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、緩存服務(wù)器、依賴(lài)服務(wù)等資源監(jiān)控 – 所有被測(cè)的應(yīng)用服務(wù)監(jiān)控,Nginx、tomcat、MySQL等。
監(jiān)控內(nèi)容
業(yè)務(wù)指標(biāo):吞吐量、響應(yīng)時(shí)間、失敗率
資源監(jiān)控:CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)、IO
日志信息:錯(cuò)誤、異常、關(guān)鍵業(yè)務(wù)日志
進(jìn)程監(jiān)控:CPU、內(nèi)存、進(jìn)程狀態(tài)、線程狀態(tài)
一個(gè)典型的linux 性能監(jiān)控工具圖:
1.3 性能測(cè)試方案設(shè)計(jì)
測(cè)試環(huán)境:線上真實(shí)業(yè)務(wù)集群
測(cè)試數(shù)據(jù):場(chǎng)景是從客戶端APP發(fā)起調(diào)用接口,考慮到線上數(shù)據(jù)樣本不涉及隱私及敏感數(shù)據(jù)且可以復(fù)用,不會(huì)對(duì)用戶造成數(shù)據(jù)污染。故從線上撈取了100萬(wàn)用戶數(shù)據(jù)樣本。
壓力策略: 1)先摸高,按照一定的線程遞增策略,根據(jù)預(yù)期目標(biāo)是否有性能瓶頸 2)峰值容量持續(xù)壓測(cè),觀察系統(tǒng)的承受及處理能力
2.性能測(cè)試執(zhí)行及分析
利用NPT性能壓測(cè)平臺(tái)完成整個(gè)性能壓測(cè)活動(dòng)
易測(cè)NPT_性能壓測(cè)_一站式測(cè)試解決方案-網(wǎng)易數(shù)帆?www.163yun.com2.1 容量場(chǎng)景:TPS摸高
性能壓測(cè)模型及場(chǎng)景設(shè)計(jì)經(jīng)過(guò)壓測(cè)在NPT平臺(tái)中壓測(cè)后的TPS-RT曲線如下
容量場(chǎng)景:TPS-RT曲線接下來(lái)按照性能分析的典型思路給大家逐一介紹下:
性能分析思路【瓶頸的精準(zhǔn)判斷】
很多情況下,在分析系統(tǒng)性能瓶頸的時(shí)候,我們總是想找到性能瓶頸的那個(gè)“拐點(diǎn)”,但是實(shí)際上大部分系統(tǒng)其實(shí)是沒(méi)有明確的拐點(diǎn)的。在實(shí)際操作中需要按照固定遞增幅度增加并發(fā)線程數(shù),進(jìn)而對(duì)于TPS 的增加控制得更為精準(zhǔn),實(shí)際業(yè)務(wù)中TPS的增加是有一個(gè)有清晰的弧度,而不是有一個(gè)非常清晰的拐點(diǎn)。
從上圖業(yè)務(wù)真實(shí)TPS-RT曲線中可以做出以下判斷:在線程逐步遞增的過(guò)程中,TPS按照固定比例上升與線程數(shù)呈現(xiàn)線性增長(zhǎng),達(dá)到一定的壓力的情況下,TPS的增長(zhǎng)幅度在衰減,最后逐步趨于平穩(wěn)。以此可以判斷出業(yè)務(wù)在一定的壓力情形下出現(xiàn)了性能瓶頸。為了更加清晰判斷性能瓶頸,接下來(lái)分析下性能衰減的過(guò)程。
【性能衰減的過(guò)程】
所謂的性能衰減可以通過(guò)每線程每秒請(qǐng)求數(shù)在逐漸變少來(lái)反應(yīng),即使TPS仍在增加,如下針對(duì)壓測(cè)業(yè)務(wù)采用3個(gè)點(diǎn),計(jì)算每線程每秒請(qǐng)求數(shù)
采樣點(diǎn)1:每線程每秒請(qǐng)求數(shù)=9547/270=35.3
采樣點(diǎn)2:每線程每秒請(qǐng)求數(shù)=13461/450=29.9
采樣點(diǎn)3:每線程每秒請(qǐng)求數(shù)=13773/495=27.8 由此可以得到如下結(jié)論 只要每線程每秒的請(qǐng)求數(shù)開(kāi)始變少,就意味著性能瓶頸已經(jīng)出現(xiàn)了。但是瓶頸出現(xiàn)之后,并不是說(shuō)服務(wù)器的處理能力(這里我們用 TPS 來(lái)描述)會(huì)下降,應(yīng)該說(shuō) TPS 仍然會(huì)上升,在性能不斷衰減的過(guò)程中,TPS 就會(huì)達(dá)到上限。 在這個(gè)場(chǎng)景的測(cè)試過(guò)程中,在性能瓶頸出現(xiàn)后,繼續(xù)保持遞增的壓力,讓瓶頸更為明顯,可以看如下TPS-RT的曲線,我們會(huì)更加清晰的看到壓力還在逐步增加,但TPS已經(jīng)趨于平穩(wěn),而平均RT卻在不斷上升
【響應(yīng)時(shí)間的拆分】
基于性能瓶頸的出現(xiàn),接下來(lái)就需要分析在性能瓶頸出現(xiàn)時(shí),哪個(gè)鏈路耗時(shí)增加明顯導(dǎo)致請(qǐng)求RT變長(zhǎng)。那么首先需要做的是畫(huà)出請(qǐng)求的整個(gè)業(yè)務(wù)鏈路。這里的策略是:先粗后細(xì),先從較粗的粒度劃分,確認(rèn)耗時(shí)較長(zhǎng)的鏈路節(jié)點(diǎn),然后再細(xì)分粒度可能到某個(gè)方法。我們先來(lái)看一個(gè)典型的響應(yīng)時(shí)間RT的分布鏈路
響應(yīng)時(shí)間 = (N1+N2+N3+N4)+(A1+A2+A3),一般我們優(yōu)先關(guān)注的是A1、A2、A3,對(duì)于網(wǎng)絡(luò)傳輸處理,在這里優(yōu)先默認(rèn)它表現(xiàn)良好 基于業(yè)務(wù)場(chǎng)景的鏈路:
第三方依賴(lài)服務(wù)采用了hystrix降級(jí)熔斷組件實(shí)現(xiàn)了獨(dú)立線程池隔離調(diào)用。
1)首先要排除發(fā)壓端是否有瓶頸,查看發(fā)壓端服務(wù)器監(jiān)控,CPU利用率和負(fù)載都還不到10%
壓測(cè)機(jī)指標(biāo)2)分析下調(diào)用第三方依賴(lài)服務(wù)的平均RT,對(duì)比如下 單應(yīng)用實(shí)例 20并發(fā) 平均rt 19.25 單應(yīng)用實(shí)例 50并發(fā) 平均rt 38.25 由此看來(lái)在并發(fā)用戶數(shù)一直往上增時(shí),調(diào)用第三方依賴(lài)服務(wù)RT上漲明顯,進(jìn)而初步需要排查的是第三方依賴(lài)服務(wù)在大并發(fā)用戶數(shù)下的處理能力,并發(fā)用戶數(shù)增加,處理能力下降,導(dǎo)致RT變長(zhǎng) 這里優(yōu)先說(shuō)下在第一輪性能壓測(cè)時(shí)發(fā)現(xiàn)的問(wèn)題并調(diào)整,同樣是TPS摸高,從下圖可以看出TPS還未達(dá)到性能瓶頸時(shí),已經(jīng)出現(xiàn)失敗請(qǐng)求
經(jīng)過(guò)分析調(diào)用第三方的線程池被打滿拋異常,采用的hystrix實(shí)現(xiàn)的業(yè)務(wù)降級(jí)熔斷,配置了獨(dú)立的線程池,線程池配置為核心和最大線程數(shù)為20,隊(duì)列為0
異常日志: Task java.util.concurrent.FutureTask@66339c68 rejected from java.util.concurrent.ThreadPoolExecutor@303bf923[Running, pool size = 20, active threads = 20, queued tasks = 0, completed tasks = 2071934] 代碼實(shí)現(xiàn)配置如下,進(jìn)而優(yōu)化調(diào)整線程池,核心線程數(shù)和最大線程數(shù)都調(diào)整為50
【構(gòu)建決策分析樹(shù)】
從壓力工具中,只需要知道 TPS、響應(yīng)時(shí)間和錯(cuò)誤率三條曲線,就可以明確判斷瓶頸是否存在。再通過(guò)分段分層策略,結(jié)合監(jiān)控平臺(tái)、日志平臺(tái),或者其他的實(shí)時(shí)分析平臺(tái),知道架構(gòu)中的哪個(gè)環(huán)節(jié)有問(wèn)題,然后再根據(jù)更細(xì)化的架構(gòu)圖一個(gè)一個(gè)拆解下去。因?yàn)檫@里業(yè)務(wù)很明顯找到了影響RT變長(zhǎng)的原因,在此沒(méi)有進(jìn)一步分析下去。
2.2 峰值穩(wěn)定性壓測(cè)
性能壓測(cè)模型及場(chǎng)景設(shè)計(jì)【性能分析】 針對(duì)precheck壓測(cè)恒定壓力1.4W 持續(xù)3min后,中間突然TPS陡增,初步分析是因?yàn)榉?wù)器端口耗盡了,看了下TCP連接狀態(tài),大量Time_wait,調(diào)用第三方依賴(lài)服務(wù)接口監(jiān)控中可以看到對(duì)應(yīng)時(shí)間點(diǎn)開(kāi)始拋異常
峰值穩(wěn)定性場(chǎng)景:TPS-RT曲線TCP狀態(tài)監(jiān)控錯(cuò)誤次數(shù)監(jiān)控連接異常堆棧信息看了下服務(wù)器的相關(guān)配置,對(duì)于端口的回收、復(fù)用、超時(shí)都未進(jìn)行優(yōu)化配置
性能優(yōu)化解決方案:
1)調(diào)整應(yīng)用服務(wù)器對(duì)于端口的回收、復(fù)用、超時(shí)進(jìn)行優(yōu)化配置
2)將B業(yè)務(wù)作為客戶端調(diào)用第三方依賴(lài)服務(wù)的連接改為長(zhǎng)連接,避免短連接每次請(qǐng)求都會(huì)占用一個(gè)端口
3. 一站式性能測(cè)試解決方案
網(wǎng)易易測(cè)團(tuán)隊(duì)通過(guò)調(diào)研各種類(lèi)型的性能測(cè)試工具和多年的技術(shù)沉淀及總結(jié),結(jié)合大數(shù)據(jù)技術(shù)開(kāi)發(fā)出性能測(cè)試平臺(tái)。平臺(tái)提供一站式的性能測(cè)試服務(wù),全面提升被測(cè)系統(tǒng)的性能和測(cè)試效率。
易測(cè)NPT_性能壓測(cè)_一站式測(cè)試解決方案-網(wǎng)易數(shù)帆?www.163yun.com平臺(tái)主要功能架構(gòu)如下
網(wǎng)易性能測(cè)試平臺(tái)具備強(qiáng)大的中臺(tái)管理能力,支持多樣化的性能場(chǎng)景構(gòu)建,同時(shí)支持所有的測(cè)試腳本和數(shù)據(jù)的上傳、下發(fā)均通過(guò)平臺(tái)進(jìn)行,做到了測(cè)試用例的集中化管理,降低了性能測(cè)試人員的溝通成本,極大程度的提升了分布式壓測(cè)前期準(zhǔn)備效率;強(qiáng)化后的壓測(cè)引擎具備瞬間高并發(fā)能力,能夠快速的獲取被測(cè)系統(tǒng)的性能指標(biāo),發(fā)現(xiàn)性能瓶頸;數(shù)據(jù)處理中心提供實(shí)時(shí)的、多維度性能測(cè)試報(bào)告,性能測(cè)試問(wèn)題提前發(fā)現(xiàn),提前解決,縮短了性能優(yōu)化周期;測(cè)試管理為多產(chǎn)品、多子系統(tǒng)和多人協(xié)作提供了途徑,測(cè)試任務(wù)的復(fù)用減少了測(cè)試腳本編寫(xiě)的次數(shù),提高了性能測(cè)試效率。
在網(wǎng)易集團(tuán)內(nèi)部全覆蓋互聯(lián)網(wǎng)業(yè)務(wù),如網(wǎng)易云音樂(lè)、網(wǎng)易嚴(yán)選、網(wǎng)易新聞等;平臺(tái)完美支撐了業(yè)務(wù)需求的六大典型場(chǎng)景
六大典型場(chǎng)景平臺(tái)提供了多樣化性能場(chǎng)景構(gòu)建,百萬(wàn)TPS發(fā)壓,實(shí)時(shí)性能數(shù)據(jù)采集及指標(biāo)智能分析等能力,并配置了網(wǎng)易一線性能測(cè)試專(zhuān)家提供在線支持
百萬(wàn)TPS發(fā)壓能力支持【關(guān)鍵總結(jié)】性能測(cè)試是針對(duì)系統(tǒng)的性能指標(biāo),建立性能測(cè)試模型,制定性能測(cè)試方案,制定監(jiān)控策略,在場(chǎng)景條件之下執(zhí)行性能場(chǎng)景,分析判斷性能瓶頸并調(diào)優(yōu),最終得出性能結(jié)果來(lái)評(píng)估系統(tǒng)的性能指標(biāo)是否滿足既定值。
總結(jié)
以上是生活随笔為你收集整理的tcp压测工具_【解决方案】性能压测及分析调优实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 迷你世界怎么得霰弹枪(24期迷你世界一)
- 下一篇: python代码加密cython_利用C