1.性能測試的應(yīng)用領(lǐng)域有哪些榴鼎?
能力驗證:通過實際的測試結(jié)果證明自己系統(tǒng)的預(yù)期能力
瓶頸分析:通過一系列的測試手段發(fā)現(xiàn)系統(tǒng)存在的性能瓶頸(并發(fā),負(fù)載晚唇,壓力巫财,失效恢復(fù))
性能調(diào)優(yōu):通過一系列的技術(shù)手段優(yōu)化系統(tǒng)性能,包括響應(yīng)時間哩陕,吞吐量平项,資源利用率
容量規(guī)劃:為了符合未來的規(guī)劃預(yù)期(用戶數(shù),市場占有率)悍及,對資源做相應(yīng)的調(diào)整闽瓢。
2.交付一個性能測試項目,請闡述你的性能測試流程
1:分析需求
2:制定測試計劃和方案(人力資源心赶,時間資源扣讼,測試機器資源)
3:設(shè)計性能測試場景和用例(并發(fā),負(fù)載缨叫,壓力椭符,穩(wěn)定性測試)
===搭建環(huán)境===
4:準(zhǔn)備用戶數(shù)據(jù)(如何確定用戶并發(fā)數(shù))
(1)線上的注冊用戶數(shù)的10%做測試環(huán)境的在線用戶
(2)根據(jù)高峰時間段和業(yè)務(wù)量荔燎,計算平均并發(fā)和峰值并發(fā)
5:設(shè)計性能測試腳本(jmter或者lr)
(1)線程,請求销钝,關(guān)聯(lián)湖雹,斷言,參數(shù)化曙搬,報告
(2)不同的線程組設(shè)計不同的測試類型
6:運行摔吏,監(jiān)控測試數(shù)據(jù)
jmeter監(jiān)聽器,jtl數(shù)據(jù)纵装,grafana+jmeter征讲,非gui
7:分析性能瓶頸
吞吐量瓶頸,響應(yīng)時間瓶頸橡娄,資源利用率瓶頸
8:性能調(diào)優(yōu)
(1)吞吐量調(diào)優(yōu):中間件诗箍,jvm,網(wǎng)卡帶寬
(2)硬件調(diào)優(yōu):cpu挽唉,磁盤滤祖,IO,TCP連接瓶籽,swap內(nèi)存
9:出具性能測試報告和總結(jié)
3. jmeter如何設(shè)計性能測試場景匠童?
并發(fā)測試:基礎(chǔ)線程組(強調(diào)單位時間的并發(fā),不存在絕對并發(fā))
基準(zhǔn)測試:反復(fù)對比結(jié)果塑顺,驗證調(diào)優(yōu)結(jié)果是否通過(tps是否提升汤求,響應(yīng)時間是否下降)
負(fù)載測試:持續(xù)不斷地增加負(fù)載,發(fā)現(xiàn)性能瓶頸(階梯加壓線程組严拒,Concurrency Thread Group)
并發(fā)用戶模式的負(fù)載:不斷增加并發(fā)用戶數(shù)扬绪,發(fā)現(xiàn)瓶頸
吞吐量模式的負(fù)載:不斷增加每秒請求數(shù)(rps)對服務(wù)端施壓,發(fā)現(xiàn)tps瓶頸
壓力測試:tps瓶頸點上持續(xù)負(fù)載
穩(wěn)定性壓力測試:tps保持高壓穩(wěn)定裤唠。一般取最大tps的80%持續(xù)運行
破壞性壓力測試:目的是只需要服務(wù)端出現(xiàn)異常
失效恢復(fù)測試:出現(xiàn)異常之后挤牛,系統(tǒng)可以很快的恢復(fù)
容量規(guī)劃測試:50萬,高峰時間段2小時
4.解釋常用的性能指標(biāo)的名稱與具體含義
吞吐量
hps:點擊率
rps:每秒請求數(shù)
qps:每秒查詢接口數(shù)
tps:單位時間完成的請求(事物)數(shù)
響應(yīng)時間:頁面渲染時間种蘸,tcp連接時間墓赴,sql查詢時間,服務(wù)端處理時間
錯誤率:沒有正常返回200的都是錯誤
cpu利用率
IO平均時間
內(nèi)存利用率
劈彪。竣蹦。顶猜。沧奴。。
5.什么是集合點长窄?設(shè)置集合點有什么意義滔吠?jmeter中如何設(shè)置集合點纲菌?
讓用戶盡可能在同一時間點發(fā)起請求
6.集合點的等待時間怎么設(shè)置?
等待時間=0疮绷,線程數(shù)達(dá)不到集合人數(shù)就會一直等待
等待時間>0翰舌,線程數(shù)在等待時間范圍內(nèi)集合發(fā)起
7.什么是壓力?有哪些壓力模式冬骚?
服務(wù)端接收請求叫壓力
并發(fā)用戶模式椅贱,加人數(shù)
吞吐量模式,加請求
8.你在性能測試中遇到哪些性能問題只冻?
響應(yīng)時間過長
tps過低
tps毛刺過多
tps經(jīng)常出現(xiàn)斷崖式下跌
進(jìn)程無緣無故失蹤
內(nèi)存溢出
cpu利用率過高
9.針對大并發(fā)壓力測試庇麦,主要是從哪幾個方面去考慮點?
考慮并發(fā)用戶數(shù)的設(shè)計
考慮測試場景
考慮服務(wù)端的資源
考慮網(wǎng)絡(luò)環(huán)境(內(nèi)網(wǎng)還是外網(wǎng))
機器是否足夠,是否需要分布式壓測
10.舉例說明jmeter的定時器用法喜德?
固定定時器:模擬用戶思考時間
rps定時器:控制每秒請求數(shù)
tps定時器:控制每秒吞吐量
11.jmeter中如何監(jiān)控linux資源山橄?
serveragent插件在服務(wù)器安裝啟動
保證防火墻對4444端口開放,否則會連接拒絕
本機啟動監(jiān)控
12.什么是性能測試舍悯?
功能測試航棱,安全測試,接口測試萌衬,性能測試都是測試目的
性能測試的目的是測試系統(tǒng)性能
壓力測試饮醇,負(fù)載測試,并發(fā)測試都是方法
通過方法去實現(xiàn)目的
13.怎么做參數(shù)化秕豫?
csv配置元件驳阎,循環(huán)讀取參數(shù)
csv函數(shù) 只對線程生效,多線程讀取
14.jmeter負(fù)載測試中怎么保持session會話馁蒂?
對session唯一性有要求的接口
(1):腳本保存session呵晚,cookie管理器并發(fā)讀取session。吞吐量相對較低
(2)正則提取保存為全局屬性沫屡,cookie管理器并發(fā)讀取session饵隙。吞吐量正常
15.什么是關(guān)聯(lián),如何動態(tài)關(guān)聯(lián)沮脖?有哪幾種關(guān)聯(lián)的方法金矛?
上下文關(guān)聯(lián),正則表達(dá)式關(guān)聯(lián)勺届,json關(guān)聯(lián)驶俊,xpath關(guān)聯(lián)
16.什么是Ramp up?你如何設(shè)置免姿?
線程啟動的時間
請求的單位時間
17.如何識別性能瓶頸饼酿?
tps下降?
響應(yīng)時間上升?
負(fù)載越來越高,響應(yīng)時間越來越長,tps沒有變化?
隨著負(fù)載升高故俐,tps卻不變想鹰,意味著單線程的tps是越來越低的。药版。辑舷。
總的tps/線程數(shù)=性能瓶頸點
Transaction Throughput vs Threads
18.簡述堆區(qū)的空間分配和gc原理
年輕代
eden和2個s區(qū)
2個s區(qū)輪轉(zhuǎn)回收垃圾
老年代
1:超出年輕代年齡閥值的對象
2:對象大小超出年輕代對象閥值
fullgc
1:老年代滿了
2:年輕代進(jìn)入老年代的對象超出了老年代剩余空間大小
老年代都是大對象,所以fullgc時間很長槽片,大約是年輕代時間的十倍何缓。
gc的時候,所有線程暫停
19.什么是內(nèi)存溢出
堆內(nèi)存溢出
棧內(nèi)存溢出
線程棧还栓。線程啟動多少由椄柩辏空間決定
20.簡述cpu的工作原理
通過cpu線程去調(diào)度運行進(jìn)程/線程,一個cpu線程同一時間只能調(diào)度一個運行線程
運行線程數(shù)超出了cpu線程蝙云,會啟動時間片分配機制
21.什么是上下文切換氓皱?哪些場景會存在上下文切換?
進(jìn)程間的切換勃刨,交接內(nèi)存/io
線程切換
線程在進(jìn)程內(nèi)共享資源波材。線程的cpu時間片用完了就會放棄cpu,進(jìn)入隊列等待
內(nèi)核切換身隐,系統(tǒng)調(diào)用廷区。
用戶空間向內(nèi)核空間發(fā)起調(diào)度請求,切換到內(nèi)核空間給予api贾铝,再次切換到用戶空間調(diào)度api隙轻。一次系統(tǒng)調(diào)用產(chǎn)生兩次切換
22.簡述平均負(fù)載和利用率
平均負(fù)載:單位時間內(nèi)正在調(diào)度cpu的線程+隊列中的線程
cpu平均調(diào)度時間。
如果cpu分配了100個時間片垢揩,有50個花在了切換上玖绿,那么利用率只有50%
23.什么是swap空間?oomkiller了解嗎叁巨?怎么開啟swap空間
磁盤空間中開辟的虛擬物理內(nèi)存斑匪。si換出,so換入
swap空間用完了锋勺,系統(tǒng)會殺死占用內(nèi)存最高的進(jìn)程
swapoff -a 關(guān)閉swap
swapon -a 開啟swap
swap空間比例:cat /proc/sys/vm/swappiness 物理內(nèi)存使用比例超出swappiness蚀瘸,就會啟用swap
設(shè)置臨時比例:sudo sysctl vm.swappiness=10
24.進(jìn)程的優(yōu)先級如何設(shè)置?
調(diào)整nice值庶橱,改變優(yōu)先級pr
nice -19 ---- 19
pr越高贮勃,進(jìn)程優(yōu)先級越低,cpu時間片越少苏章;反之優(yōu)先級越高寂嘉,時間片越多
25.吞吐量大幅度波動有哪些原因?
內(nèi)存不足
tomcat連接數(shù)不夠
網(wǎng)卡隊列不夠
線程過多
26.哪些現(xiàn)象說明了IO瓶頸?
await:io等待時間垫释,隊列時間+io處理時間
svctm:平均io的時間
await-svctm:得到的是io隊列時間,差值越大撑瞧,表示io處理效率越低
%util:io的使用百分比棵譬,越高表示磁盤越繁忙
27:了解哪些資源監(jiān)控命令?
top
lscpu
mpstat
vmstat
pidstat
iostat
netstat
28.如何用命令行生成測試報告预伺?jtl文件怎么分析订咸?
jmeter -n -t XX.jmx -l XX.jtl -e -o httpreport
29.簡要描述如何分布式執(zhí)行腳本
slave配置
master配置
30.設(shè)計一個持續(xù)集成框架(描述清晰,能畫出來)
docker+jenkins+gitlab+ant+jmeter+nginx+php
性能測試中Linux命令
主動上下文切換:cswch/s 當(dāng)某一任務(wù)處于阻塞酬诀,比如說脏嚷, I/O、內(nèi)存等系統(tǒng)資源不足時瞒御,就會發(fā)生自愿上下文切換 將主動讓出自己的CPU資源
被動上下文切換:nvcswch/s CPU分配給某一任務(wù)的時間片耗盡父叙,因此將強迫該進(jìn)程讓出CPU的執(zhí)行權(quán)。比如大量進(jìn)程爭搶 CPU
strace -tt -f -p 21156 查看系統(tǒng)調(diào)用信息
strace -o strace.log -tt -p 【pid】
dstat -y 查看系統(tǒng)中斷和上下文切換
pidstat -w 統(tǒng)計進(jìn)程的上下文切換
pidstat -wt 統(tǒng)計threads的上下文切換
pidstat -p 7826 -w 1 10 顯示進(jìn)程的上下文切換
sar -w 1 統(tǒng)計proc和上下文切換
grep ctxt /proc/$pid/status 統(tǒng)計上下文切換數(shù)
watch -d cat /proc/interrupts 統(tǒng)計進(jìn)程中斷的方式
apt install sysbench sysstat 安裝sysbench肴裙,模擬多線程切換
sysbench --threads=10 --max-time=300 threads run 10 個線程運行 5 分鐘的基準(zhǔn)測試趾唱,模擬多線程切換
ps aux | sort -k3nr |head -n 10 按照按照消耗CPU前10排序的進(jìn)程
ps aux | sort -k4nr |head -n 10 按照按照消耗內(nèi)存前10排序的進(jìn)程
pstree -p | wc -l 查詢當(dāng)前整個系統(tǒng)已用的線程或進(jìn)程數(shù)
pstree -p pid | wc -l 統(tǒng)計進(jìn)程的線程數(shù)
ps -o nlwp pid 查看進(jìn)程下的線程數(shù)
1:netstat -nat|grep ESTABLISHED|wc -l 查看系統(tǒng)的總連接數(shù)
2:netstat -anp|grep pid|wc -l 統(tǒng)計進(jìn)程的總連接數(shù)
注:1和2組合使用
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看連接狀態(tài)
watch -d -n 1 'cat /proc/softirqs' 查看中斷種類。NET_TX 或 NET _RX 如果變化很快的話就是網(wǎng)絡(luò)中斷引起的蜻懦,
否則是由系統(tǒng)其他原因造成的中斷
ps -A -o stat,ppid,pid,cmd |grep -e '^[Zz]' 定位僵尸進(jìn)程
kill -HUP 僵尸進(jìn)程父ID 殺死僵尸進(jìn)程
ps -eLo pid,stat | grep 3598 | grep running | wc -l 根據(jù)進(jìn)程狀態(tài)篩選線程
time dd if=/dev/zero of=test bs=1M count=4096 測試IO讀寫速度
sync;time -p bash -c "(dd if=/dev/zero of=test bs=1M count=200)" 當(dāng)前目錄下創(chuàng)建一個test的文件甜癞,寫入200個1M的數(shù)據(jù)。測試寫瓶頸
hdparm -tT --direct /dev/sda 測試讀瓶頸
iozone -a -n 512k -g 4m -i 0 -i 1 -i 5 -f /mnt/iozone -Rb ./iozone.xls
http://www.reibang.com/p/8fadfaa5abe6 io測試
wget [http://www.iozone.org/src/current/iozone3_482.tar](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.iozone.org%2Fsrc%2Fcurrent%2Fiozone3_482.tar)
tar -xvf iozone3_429.tar
cd iozone3_429/src/current
apt-get install gcc
make
make linux-ia64
iostat -x -k -d 1
iotop -botq -p 【pid】 輸出進(jìn)程的io信息
iotop -d 2 -n 5 間隔2秒,輸出5次 監(jiān)控時間段內(nèi)的IO
iotop -o 顯示產(chǎn)生IO的進(jìn)程
%iowait:不能反應(yīng)磁盤瓶頸 實際反應(yīng)的是cpu的io等待時間:%iowait = (cpu idle time)/(all cpu time)
rrqm/s: 每秒對該設(shè)備的讀請求被合并次數(shù),文件系統(tǒng)會對讀取同塊(block)的請求進(jìn)行合并
wrqm/s: 每秒對該設(shè)備的寫請求被合并次數(shù)
r/s: 每秒完成的讀次數(shù)
w/s: 每秒完成的寫次數(shù)
rkB/s: 每秒讀數(shù)據(jù)量(kB 為單位)
wkB/s: 每秒寫數(shù)據(jù)量(kB 為單位)
avgrq-sz:平均每次 IO 操作的數(shù)據(jù)量(扇區(qū)數(shù)為單位)
avgqu-sz: 是平均請求隊列的長度黄娘。隊列長度越短越好
await: 平均每次 IO 請求等待時間(包括等待時間和處理時間疫粥,毫秒為單位)。一般地系統(tǒng)IO響應(yīng)時間應(yīng)該低于5ms
svctm: 平均每次 IO 請求的處理時間(毫秒為單位)
%util: 1 秒中有百分之多少的時間用于 I/O 操作攒盈。該參數(shù)表示了設(shè)備的繁忙程度
CPU會拿出一部分時間來等待IO(iowait),從磁盤的角度看,如果磁盤的利用率已經(jīng)滿了(util%)渡贾,這種情況下,CPU使用率可能不高雄右,但是系統(tǒng)整體QPS已經(jīng)上不去了空骚,如果繼續(xù)加大流量,會導(dǎo)致單次IO耗時的繼續(xù)增加(IO請求都堵在隊列里)擂仍,從而影響系統(tǒng)整體的性能囤屹。
高iowait,并不代表磁盤的瓶頸逢渔。唯一能說明磁盤是系統(tǒng)瓶頸的方法是很高的svctm肋坚,一般來說超過20ms,就代表了不太正常的磁盤性能。只要大于20ms智厌,就必須考慮是否磁盤讀寫的次數(shù)太多诲泌,導(dǎo)致磁盤性能降低。
svctm 一般要小于 await铣鹏。svctm的大小一般和磁盤性能有關(guān)敷扫,CPU/內(nèi)存的負(fù)荷也會對其有影響,請求過多也會導(dǎo)致 svctm 的增加诚卸。await 的大小一般取決于svctm 以及 I/O 隊列的長度葵第。如果 svctm 接近 await,說明 I/O 幾乎沒有等待時間合溺;如果 await 遠(yuǎn)大于 svctm卒密,說明I/O隊列太長,應(yīng)用的響應(yīng)時間變慢棠赛,如果響應(yīng)時間超過了用戶可以容許的范圍哮奇,需要考慮更換更快的磁盤;調(diào)整內(nèi)核elevator 算法睛约;優(yōu)化應(yīng)用屏镊;升級CPU
經(jīng)驗總結(jié):
1:提高IO效率原則: 順序?qū)懀S機讀
2:重點監(jiān)控 rkB/s 和 和 wkB/s
3:%util接近100%痰腮,說明產(chǎn)生的I/O請求太多而芥,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸
4:await與svctm相差很大的時候膀值,要注意磁盤的IO性能棍丐。差值越小,說明隊列時間越短沧踏,反之則隊列時間越長歌逢。說明系統(tǒng)出了問題。
規(guī)避IO負(fù)載過高:
1. 如果服務(wù)器用來做日志分析翘狱,注意隨機讀和順序?qū)懨匕福苊舛ㄆ诘膲嚎s、解壓大日志潦匈。
2. 如果是前端應(yīng)用服務(wù)器阱高,要避免程序頻繁打本地日志、或者異常日志
3. 如果是存儲服務(wù)(mysql茬缩、nosql)赤惊,盡量將服務(wù)部署在單獨的節(jié)點上,做讀寫分離降低壓力
超市排隊去哪個柜臺付款凰锡?
1:首先看排的隊人數(shù)未舟,5個人比20人要快
2:看前面人購買的東西多少圈暗,如果前面的人購買了一個月的物品,可以考慮換個隊伍排
3:看收銀員的速度裕膀,如果碰上了新手员串,那等待時間會很久
I/O 對比超市排隊:
r/s+w/s 類似于排隊的人員總數(shù)
平均隊列長度(avgqu-sz)相當(dāng)于單位時間里平均排隊的人數(shù)
平均服務(wù)時間(svctm)相當(dāng)于收銀員的收款速度
平均等待時間(await)相當(dāng)于平均每人的等待時間
平均I/O數(shù)據(jù)(avgrq-sz)相當(dāng)于平均每人所買的東西多少
I/O 操作率 (%util)相當(dāng)于收款臺前有人排隊的時間比例