性能測(cè)試相關(guān)文章
https://blog.csdn.net/lzz718719/article/details/130288200
https://blog.csdn.net/csdnchengxi/article/details/131228372
https://blog.csdn.net/xfw17397388089/article/details/132629793
https://www.cnblogs.com/doupi/p/13233788.html
1往堡、一個(gè)完整的性能測(cè)試流程是怎樣的辣之?
- a. 做性能需求分析晒奕,挑選業(yè)務(wù)核心場(chǎng)景或用戶最頻繁使用的功能來(lái)進(jìn)行性能測(cè)試,如:登錄享郊、搜索、提交訂單、算法檢測(cè)等
- b. 確定性能指標(biāo)羡玛,如:
- 錯(cuò)誤率 < 0.01%
- 90%響應(yīng)時(shí)間 < 5 s
- 吞吐量 > 1000筆/s
- 并發(fā)用戶1000時(shí),CPU和內(nèi)存使用率 < 70%
- c. 性能測(cè)試計(jì)劃宗苍,明確測(cè)試時(shí)間稼稿、測(cè)試環(huán)境薄榛、測(cè)試工具等
- 測(cè)試時(shí)間,一般選擇在功能穩(wěn)定后让歼,如:第一輪測(cè)試后
- 測(cè)試環(huán)境敞恋,獨(dú)立搭建一套測(cè)試環(huán)境或者使用UAT環(huán)境,硬件配置與生產(chǎn)環(huán)境一致或等比例縮減
- 測(cè)試工具谋右,選擇性能測(cè)試工具(JMeter)硬猫、監(jiān)控工具(Prometheus/grafana)等等
- d. 搭建測(cè)試環(huán)境:根據(jù)性能測(cè)試計(jì)劃的要求搭建
- e. 編寫性能測(cè)試用例,編寫測(cè)試腳本改执,準(zhǔn)備性能測(cè)試數(shù)據(jù)
- f. 性能測(cè)試腳本調(diào)優(yōu)啸蜜,設(shè)計(jì)檢查點(diǎn)、參數(shù)化天梧、關(guān)聯(lián)盔性、集合點(diǎn)、實(shí)物呢岗,調(diào)整思考時(shí)間冕香;
- g. 設(shè)計(jì)性能測(cè)試場(chǎng)景,監(jiān)控服務(wù)器后豫,運(yùn)行測(cè)試場(chǎng)景
- h. 分析性能測(cè)試結(jié)果悉尾,判斷性能瓶頸,反饋結(jié)果信息
- i. 回歸性能測(cè)試挫酿,達(dá)到制定的性能測(cè)試目標(biāo)
2 构眯、介紹下最近做過(guò)的項(xiàng)目、背景早龟、預(yù)期目標(biāo)惫霸、系統(tǒng)架構(gòu)、場(chǎng)景設(shè)計(jì)以及遇到的性能問(wèn)題葱弟,定位分析及優(yōu)化壹店;
考察點(diǎn):
- a. 對(duì)項(xiàng)目的了解情況
- b. 需求分析和場(chǎng)景設(shè)計(jì)思路
- c. 問(wèn)題分析思路及優(yōu)化驗(yàn)證手段
4把兔、怎么確定并發(fā)用戶數(shù)嫉柴?
- 根據(jù)生產(chǎn)環(huán)境收集的用戶訪問(wèn)數(shù)據(jù)進(jìn)行預(yù)估,按二八原則預(yù)估
- 根據(jù)業(yè)務(wù)需求確定
5渴频、 性能測(cè)試需求從哪里來(lái)藏杖?
從需求文檔或用戶故事來(lái)将塑,如果需求不太合理或不明確,需和產(chǎn)品蝌麸、業(yè)務(wù)等相關(guān)人員進(jìn)行討論点寥;
5、項(xiàng)目處于什么階段適合性能測(cè)試介入来吩,原因是什么开财?
一般情況下汉柒,在功能測(cè)試,系統(tǒng)比較穩(wěn)定時(shí)開(kāi)展(至少一輪測(cè)試后)
6责鳍、介紹下你在工作中使用過(guò)的監(jiān)控和分析工具碾褂,各自有什么特點(diǎn)?
- 監(jiān)控工具我常用的時(shí)zabbix/Prometheus/grafana历葛,分別用他們來(lái)查看 XXX 指標(biāo)正塌;
- 分析工具我常用的是arthas,jvm自帶的命令分析工具恤溶,分別用他們來(lái)進(jìn)行 XXX 分析乓诽;
7、了解過(guò)全鏈路壓測(cè)嗎咒程?闡述一下你的理解或者實(shí)踐經(jīng)驗(yàn)鸠天?
8、如何排查CPU占用比較多的線程方法帐姻?
Linux 相關(guān)命令:
- top:找到CPU % 最高的進(jìn)程PID稠集;
- top -H -p pid:查看進(jìn)程下的線程,找到資源耗用率最高的線程pid饥瓷;
- shell 命令:printf "%x\n" pid (%x剥纷,表示十六進(jìn)制,\n是換行)
- jstack 分析:jstack pid(十六進(jìn)制) 1> xxx.temp
9呢铆、線上系統(tǒng)出現(xiàn)了MQ的消息積壓晦鞋,這個(gè)時(shí)候應(yīng)該怎么做?
處理步驟:
- 首先要快速解決消息積壓?jiǎn)栴}棺克,如:加大consumer數(shù)量悠垛,消費(fèi)頻次;
- 如果消息太多評(píng)估是否丟棄消息或者重啟MQ娜谊;
- 保留日志确买,線上業(yè)務(wù)止血后快速排查問(wèn)題出現(xiàn)的原因,是否有其他類似場(chǎng)景存在同樣的問(wèn)題因俐;
- 4.組織復(fù)盤,評(píng)估后續(xù)優(yōu)化方案周偎,及時(shí)跟進(jìn)落地優(yōu)化的進(jìn)度和效果抹剩;
9、如果讓你負(fù)責(zé)團(tuán)隊(duì)的性能測(cè)試蓉坎,你會(huì)從哪方面考慮和開(kāi)展工作澳眷?
考察點(diǎn):
- 是否有完整的性能測(cè)試技術(shù)體系總結(jié);
- 根據(jù)實(shí)際情況的分析和落地執(zhí)行能力蛉艾;
- 是否注重團(tuán)隊(duì)配合钳踊、成員培養(yǎng)和質(zhì)量把控能力衷敌;
10、性能測(cè)試關(guān)注的指標(biāo)是什么拓瞪?
從外部看應(yīng)關(guān)注的指標(biāo):
- 并發(fā)用戶數(shù):指同時(shí)發(fā)起請(qǐng)求的用戶數(shù)量
- 吞吐量:每秒鐘系統(tǒng)能處理的請(qǐng)求數(shù)缴罗、任務(wù)數(shù)
- 響應(yīng)時(shí)間:服務(wù)處理一個(gè)請(qǐng)求或者一個(gè)任務(wù)的耗時(shí)
- 錯(cuò)誤率:一批請(qǐng)求中結(jié)果出錯(cuò)的請(qǐng)求所占比例
- 資源利用率:指系統(tǒng)在處理請(qǐng)求時(shí)出現(xiàn)錯(cuò)誤的概率
從服務(wù)器的角度關(guān)注的指標(biāo):CPU、內(nèi)存祭埂、服務(wù)器負(fù)載面氓、網(wǎng)絡(luò)、磁盤IO
11. 你們性能測(cè)試在什么環(huán)境開(kāi)展蛆橡?
測(cè)試環(huán)境分SIT(系統(tǒng)集成測(cè)試)和UAT(用戶驗(yàn)收測(cè)試)兩套測(cè)試環(huán)境
一般情況下舌界,是在UAT環(huán)境進(jìn)行性能測(cè)試,因?yàn)閁AT比SIT環(huán)境穩(wěn)定泰演,UAT環(huán)境更貼近生產(chǎn)環(huán)境呻拌,有時(shí)也會(huì)從生產(chǎn)環(huán)境同步數(shù)據(jù)到UAT環(huán)境,數(shù)據(jù)真實(shí)性較高睦焕;
12. 怎么分析性能測(cè)試結(jié)果
收集好測(cè)試的數(shù)據(jù)藐握,如:
JMeter壓測(cè)結(jié)果報(bào)告,壓測(cè)機(jī)硬件資源占用复亏,被測(cè)服務(wù)器硬件資源占用情況趾娃,被測(cè)服務(wù)的日志等測(cè)試數(shù)據(jù);
https://blog.csdn.net/weixin_40863562/article/details/127772919
分析過(guò)程:
- 1缔御、確定測(cè)試結(jié)果是否可信
- 分析整個(gè)性能測(cè)試執(zhí)行期間抬闷,測(cè)試環(huán)境是否穩(wěn)定。壓測(cè)機(jī)存在硬件瓶頸耕突、網(wǎng)絡(luò)出現(xiàn)擁堵笤成、待測(cè)系統(tǒng)參數(shù)配置錯(cuò)誤(數(shù)據(jù)庫(kù)連接、nginx連接等等)
- 檢查JMeter測(cè)試腳本參數(shù)設(shè)置是否合理眷茁。Ramp-Up Period(in seconds)設(shè)置為0或者1炕泳,會(huì)給待測(cè)服務(wù)器造成巨大壓力,輕則造成服務(wù)器響應(yīng)時(shí)間超長(zhǎng)上祈,重則部分請(qǐng)求超時(shí)而報(bào)錯(cuò)培遵。正確應(yīng)該是逐步加壓,而不是瞬間達(dá)到目標(biāo)壓力登刺。
- JMeter運(yùn)行模式是否合理籽腕。JMeter是否采用非GUI模式運(yùn)行,GUI模式運(yùn)行JMeter對(duì)CPU和內(nèi)存占用較高纸俭;
- 檢測(cè)測(cè)試結(jié)果是否暴露出了系統(tǒng)瓶頸皇耗。測(cè)試結(jié)果正常,首先考慮揍很,并發(fā)用戶數(shù)是否足夠多郎楼,對(duì)待測(cè)服務(wù)器施加的壓力是否足夠大万伤。另外還需要考慮,待測(cè)系統(tǒng)是否有機(jī)制屏蔽了大部分壓力(如:使用緩存技術(shù))呜袁。
- 2敌买、分析測(cè)試結(jié)果是否存在性能問(wèn)題,主要從關(guān)注的性能指標(biāo)進(jìn)行分析傅寡,然后綜合所有指標(biāo)進(jìn)行分析放妈,找出系統(tǒng)瓶頸和問(wèn)題,并提出改進(jìn)建議荐操。
- 吞吐量:吞吐量是否偏低芜抒,低于需求需求目標(biāo);代碼是否存在瓶頸托启;
- 響應(yīng)時(shí)間(RT):響應(yīng)時(shí)間是否過(guò)長(zhǎng)宅倒;綜合平均RT、最大RT屯耸、90%RT多種不同維度的RT進(jìn)行分析拐迁,如果數(shù)據(jù)相差范圍較大,RT分布沒(méi)有規(guī)律疗绣,那需要進(jìn)一步分析是否存在系統(tǒng)瓶頸线召。
- 錯(cuò)誤率:是否存在較高的錯(cuò)誤率;
- 資源利用率:是否存在較高的資源利用率(CPU> 80%多矮,MEM > 80%缓淹,GPU > 80%、網(wǎng)絡(luò)帶寬塔逃、磁盤IO等等)
- CPU:CPU占用是否穩(wěn)定讯壶?CPU占用是否一直占用不下降?
- 內(nèi)存:內(nèi)存是否一直增加不下降湾盗?
- GPU:GPU占用是否長(zhǎng)期100%伏蚊?GPU占用是否異常?GPU占用是否及時(shí)得到釋放格粪?
- 網(wǎng)絡(luò)帶寬:網(wǎng)絡(luò)上行/下行與吞吐量不成正比躏吊,那有可能存在系統(tǒng)瓶頸
- 磁盤IO:
13、有哪些常見(jiàn)的性能瓶頸帐萎?(參考:【性能測(cè)試】常見(jiàn)性能瓶頸解析及調(diào)優(yōu)方案)
1. TPS波動(dòng)較大
原因解析:一般有三種:網(wǎng)絡(luò)波動(dòng)比伏、其他服務(wù)資源競(jìng)爭(zhēng)、垃圾回收吓肋。
- 網(wǎng)絡(luò)波動(dòng):性能測(cè)試環(huán)境一般在內(nèi)網(wǎng)或者壓測(cè)機(jī)和待測(cè)服務(wù)在同一網(wǎng)段凳怨,可通過(guò)監(jiān)控網(wǎng)絡(luò)的出入流量進(jìn)行排查瑰艘。網(wǎng)絡(luò)波動(dòng)的影響因素:CPU處理能力是鬼、網(wǎng)絡(luò)帶寬肤舞、網(wǎng)卡、防火墻等均蜜。
- 其他服務(wù)資源競(jìng)爭(zhēng):可通過(guò)top命令或者服務(wù)梳理方式來(lái)排查在壓測(cè)時(shí)是否有其他服務(wù)運(yùn)行導(dǎo)致資源競(jìng)爭(zhēng)李剖,測(cè)試資源充足的情況下,在服務(wù)器上只部署待測(cè)服務(wù)囤耳。
- 垃圾回收:造成TPS波動(dòng)最常見(jiàn)的原因篙顺,可能會(huì)引起、CPU占用高充择、內(nèi)存溢出德玫、內(nèi)存泄露等問(wèn)題,可通過(guò)GC監(jiān)控命令來(lái)排查椎麦。命令如下:
# 監(jiān)控Full GC的發(fā)生情況
# 將GC信息實(shí)時(shí)打印到屏幕上
jstat -gc <pid> <interval> <count>
jstat -gcutil <pid> <interval> <count>
# 將GC信息輸出到文件中
jstat -gc <pid> <interval> <count> >> /path/gc.txt
jstat -gcutil <pid> <interval> <count> >> /path/gc.txt
# 參數(shù)解析
-gc 監(jiān)控垃圾回收器的運(yùn)行情況宰僧,顯示各個(gè)垃圾回收器的運(yùn)行次數(shù)、時(shí)間观挎、堆內(nèi)存使用情況等信息琴儿。
-gcutil 監(jiān)控垃圾回收器的內(nèi)存使用情況,顯示各個(gè)內(nèi)存區(qū)域(包括新生代嘁捷、老年代造成、永久代等)的使用率、已使用空間雄嚣、總空間等信息晒屎。
<pid>參數(shù)表示Java應(yīng)用程序的進(jìn)程ID,可使用top命令查詢
<interval>參數(shù)表示顯示信息的時(shí)間間隔现诀,單位:ms
<count>參數(shù)表示顯示信息的次數(shù)
調(diào)優(yōu)方案:
- 網(wǎng)絡(luò)波動(dòng):選擇內(nèi)網(wǎng)壓測(cè)夷磕,切換網(wǎng)段,或者等網(wǎng)絡(luò)較為穩(wěn)定或空閑時(shí)進(jìn)行壓測(cè)驗(yàn)證仔沿;
- 其他服務(wù)資源競(jìng)爭(zhēng):找到壓測(cè)時(shí)正在運(yùn)行的其他服務(wù)坐桩,溝通協(xié)調(diào)暫時(shí)停止該服務(wù),測(cè)試資源充足的情況下封锉,更換新服務(wù)器绵跷,只部署待測(cè)服務(wù)。
- 垃圾回收:通過(guò)GC文件分析成福,如果發(fā)現(xiàn)有頻繁的 Full GC碾局,可以通過(guò)修改JVM的堆內(nèi)存參數(shù) -Xmx(Xmx的值不能超過(guò)服務(wù)節(jié)點(diǎn)內(nèi)存的50%),然后再次壓測(cè)驗(yàn)證奴艾,達(dá)到一個(gè)合適的值净当。
2. 高并發(fā)下大量報(bào)錯(cuò)
原因解析:短連接導(dǎo)致的端口被完全占用,線程池最大線程數(shù)配置較小及超時(shí)時(shí)間短導(dǎo)致。
調(diào)優(yōu)方案:
- 短連接問(wèn)題:修改服務(wù)節(jié)點(diǎn)的tcp_tw_reuse參數(shù)為1像啼,釋放TIME_WAIT_scoket用于新連接俘闯;
- 線程池問(wèn)題:修改服務(wù)節(jié)點(diǎn)中容器的server.xml文件中的配置參數(shù),主要參數(shù)有:
# 最大線程數(shù)忽冻,即服務(wù)端可以同時(shí)響應(yīng)處理的最大請(qǐng)求數(shù)
maxThreads="200"
# Tomcat的最大連接線程數(shù)真朗,即超過(guò)設(shè)定的閾值,Tomcat會(huì)關(guān)閉不再需要的socket線程
maxSpareThreads="200"
# 所有可用線程耗盡時(shí)僧诚,可放在請(qǐng)求等待隊(duì)列中的請(qǐng)求數(shù)遮婶,超過(guò)該閾值的請(qǐng)求將不予處理,返回Connection refused錯(cuò)誤
acceptCount="200"
# 等待超時(shí)的閾值湖笨,單位為毫秒旗扑,設(shè)置為0時(shí)表示永不超時(shí)
connectionTimeout="20000"
3. 集群類系統(tǒng),各服務(wù)節(jié)點(diǎn)負(fù)載不均衡
原因解析:出現(xiàn)這類問(wèn)題的原因一般是SLB服務(wù)設(shè)置了會(huì)話保持慈省,會(huì)導(dǎo)致請(qǐng)求只分發(fā)到其中一個(gè)節(jié)點(diǎn)肩豁。
調(diào)優(yōu)方案:如果確認(rèn)是如上原因,可通過(guò)修改SLB服務(wù)(F5/HA/Nginx)的會(huì)話保持參數(shù)為None辫呻,然后再次壓測(cè)驗(yàn)證清钥;
4. 并發(fā)數(shù)不斷增加,TPS上不去放闺,CPU使用率較低
原因解析:出現(xiàn)該類問(wèn)題祟昭,常見(jiàn)的原因有:大量的數(shù)據(jù)庫(kù)讀寫操作、SQL沒(méi)有創(chuàng)建索引/SQL語(yǔ)句篩選條件不明確怖侦、代碼中設(shè)有同步鎖篡悟,高并發(fā)時(shí)出現(xiàn)鎖等待;
調(diào)優(yōu)方案:
- SQL問(wèn)題:沒(méi)有索引就創(chuàng)建索引匾寝,SQL語(yǔ)句篩選條件不明確就優(yōu)化SQL搬葬、業(yè)務(wù)邏輯,數(shù)據(jù)量龐大(百萬(wàn)級(jí)以上)可進(jìn)行數(shù)據(jù)庫(kù)讀寫分離艳悔、引入Redis等數(shù)據(jù)庫(kù)緩存工具急凰;
- 同步鎖問(wèn)題:是否去掉同步鎖,有時(shí)候不僅僅是技術(shù)問(wèn)題猜年,還涉及到業(yè)務(wù)邏輯的各種判斷抡锈,是否去掉同步鎖,建議和開(kāi)發(fā)產(chǎn)品同事溝通確認(rèn)乔外;
5床三、壓測(cè)過(guò)程中TPS不斷下降,CPU使用率不斷降低
原因解析:一般來(lái)說(shuō)杨幼,出現(xiàn)這種問(wèn)題的原因是因?yàn)榫€程block導(dǎo)致撇簿,當(dāng)然不排除其他可能聂渊;
調(diào)優(yōu)方案:如果是線程阻塞問(wèn)題,修改線程策略四瘫,然后重新驗(yàn)證即可歧沪;
14、系統(tǒng)的性能需求不明確怎么判斷標(biāo)準(zhǔn)莲组?
- 參考行業(yè)標(biāo)準(zhǔn):了解相關(guān)行業(yè)的標(biāo)準(zhǔn)和最佳實(shí)踐,可作為一個(gè)參考暖夭。需要查詢相關(guān)數(shù)據(jù)
- 參考競(jìng)爭(zhēng)對(duì)手:觀察競(jìng)爭(zhēng)對(duì)手的系統(tǒng)性能表現(xiàn)锹杈,了解他們的響應(yīng)時(shí)間、并發(fā)用戶數(shù)等性能指標(biāo)迈着, 可作為一個(gè)參考竭望。怎么獲取競(jìng)爭(zhēng)對(duì)手的系統(tǒng)性能數(shù)據(jù)
- 用戶反饋和需求:(To B用得較多)與用戶進(jìn)行溝通,了解他們對(duì)系統(tǒng)性能的期望和需求裕菠。
- 進(jìn)行用戶調(diào)研:(To C較多)通過(guò)問(wèn)卷調(diào)查咬清、用戶訪談等方式,主動(dòng)收集用戶對(duì)系統(tǒng)性能的評(píng)價(jià)和期望奴潘。
- 進(jìn)行實(shí)驗(yàn)和評(píng)估:系統(tǒng)開(kāi)發(fā)早期旧烧,可進(jìn)行一些試驗(yàn)和評(píng)估,了解系統(tǒng)在不同負(fù)載下的性能表現(xiàn)画髓,可作為一個(gè)參考掘剪。
15、 B/S 架構(gòu)下奈虾,如果系統(tǒng)性能瓶頸在前端夺谁,需要怎么左做?
- 壓縮和優(yōu)化資源:使用壓縮算法(Gzip)降低圖像肉微、視頻等資源的大胸遗浮;
- 使用瀏覽器緩存:設(shè)置適當(dāng)?shù)木彺娌呗缘锬桑瑴p少重復(fù)的網(wǎng)絡(luò)請(qǐng)求勿负;
- 減少重定向:每次重定向都會(huì)增加額外的網(wǎng)絡(luò)請(qǐng)求和延遲;
- 異步加載資源:將不影響頁(yè)面渲染的資源(腳本劳曹、樣式表等)使用異步加載笆环;
- 延遲加載內(nèi)容:適用于長(zhǎng)頁(yè)面或大量?jī)?nèi)容頁(yè)面,使用分頁(yè)或者滾動(dòng)加載方式厚者;
- 使用CDN加速:使用CDN分發(fā)靜態(tài)資源躁劣,緩存到全球各地的服務(wù)器上,提高加載速度库菲;