目的
壓測(cè)服務(wù),找到服務(wù)器里應(yīng)用的瓶頸。
選取業(yè)務(wù)
選取了高PV的業(yè)務(wù),和用戶能一步觸達(dá)的業(yè)務(wù)(本人指的“一步觸達(dá)”,是指通過(guò)推送或者其他途徑,可以快速進(jìn)入的業(yè)務(wù))。如:閃屏廣告、評(píng)論列表等
測(cè)試工具
- Jmeter:Jmeter是一個(gè)壓測(cè)工具,可以模擬高并發(fā)情景,可以利用斷言查看返回結(jié)果,還有大量指標(biāo)可以觀察壓測(cè)狀況。
1.Jmeter可以配置多種控制器,根據(jù)不同需求選擇,本人選擇的是“簡(jiǎn)單控制器”;
2.斷言,根據(jù)響應(yīng)內(nèi)容來(lái)斷定是否請(qǐng)求成功;
3.聚合報(bào)告,各路指標(biāo),重點(diǎn)考察:平均響應(yīng)時(shí)間/中位數(shù)/cpu峰值/錯(cuò)誤率/吞吐量(qps)。
- visualVM:這是一款jdk內(nèi)置的工具,用于內(nèi)存泄露、性能瓶頸的分析,一般在以下路徑
你的文件路徑\jdk1.8.0_91\bin
接下來(lái),需要配置tomcat下的catalina.sh
JAVA_OPTS='-XX:+UseG1GC -XX:+UseStringDeduplication -Dcom.sun.management.jmxremote -XX:+HeapDumpOnOutOfMemoryError'
#服務(wù)器IP
JAVA_OPTS='-Djava.rmi.server.hostname=121.41.XX.XX'
#監(jiān)聽(tīng)端口
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.port=8999"
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false"
#開(kāi)起用戶名密碼登錄
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.authenticate=true"
#設(shè)置密碼文件路徑
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.password.file=/mnt/tomcat/tomcat_8181/conf/jmxremote.password"
#設(shè)置用戶權(quán)限文件路徑
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.access.file=/mnt/tomcat/tomcat_8181/conf/jmxremote.access"
這些配置都會(huì)在本地的visualVM登錄時(shí)使用,登錄以后便可查看jvm的堆棧,線程情況
服務(wù)器使用jstat -gcutil PID,查看GC收集時(shí)間。
觀察cpu
可以啟動(dòng)腳本
while true ; do
top -p PID -n 1 -b > temp.log ;
cat temp.log | awk 'NR==8 {printf $9 " cpu per " $10 " memory per " '"\"$(date +%Y-%m-%d-%H:%M:%S)\""' " \n"}' | tee -a top_v1.log;
sleep 1;
done
參數(shù)控制
在測(cè)試過(guò)程中,會(huì)對(duì)部分參數(shù)進(jìn)行設(shè)置,進(jìn)而觀察結(jié)果變化。
并發(fā)數(shù):100-1000之間
mysql連接數(shù):200和800
redis連接數(shù):1000和2000
(mysql和redis的連接數(shù),只有兩個(gè)結(jié)點(diǎn),沒(méi)有中間取值)
- jvm啟動(dòng)參數(shù),上文catalina.sh已經(jīng)配置了
-XX:+UseG1GC -XX:+UseStringDeduplication
關(guān)系圖
注意點(diǎn)
服務(wù)器和本機(jī)盡可能在一個(gè)內(nèi)網(wǎng),這個(gè)很重要,盡量減少路由器,網(wǎng)卡等吞吐量的影響。
如果單單壓測(cè)服務(wù)器,為了找到應(yīng)用的極限的話,最好把mysql/redis的連接數(shù)增大,甚至業(yè)務(wù)里壓根沒(méi)有mysql和redis連接。