用shell脚本分析性能压测日志小记

前端之家收集整理的这篇文章主要介绍了用shell脚本分析性能压测日志小记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用Jmeter进行同步压测(多线程模型)、会生成result.jtl结果文件,需要进一步分析结果文件,来统计想要的数据。我一般使用shell脚本进行分析。

result.jtl

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect

1497267773069,139,pay,2017061219425306104ngelB0111202,线程组 1-2,true,46,0

1497267848112,141,2017061219425306104aefto0111004,45,0

1497267944837,145,2017061219425306104yuXae0111206,42,0

@H_404_16@

对类似上述的日志中进行分析,目标需求是统计:请求总数(total number)、最小响应时间(MINRT)、平均相应时间(AVGRT)、最大相应时间(MAX RT)、响应时间分布:90%、99.5%、99.9%、99.99%、99.999%、吞吐量(TPS)、最耗时间的topN交易流水等。

第一步:首先因为压测时,压测客户端会与服务器建立TCP连接(三次握手),以及服务端线程池的预热启动,需要消耗比较长的时间。因此我们在压测结果文件result.jtl中将前N行去掉,不予统计

sed -i '1,1000d' result.jtl@H_404_16@

第二步:统计从第一次请求完成,到最后一次请求结束,整个压测过程的总时间(result.jtl中的timeStamp记录了该请求响应的时间戳),在本次案例中即为1497267944837 - 1497267773069得到的时间(ms)。

cat result.jtl | awk '{print $1}' | awk -F "," '{print $1}' > totalTime.log

begin=`head -1 totalTime.log`

end=`tail -1 totalTime.log`

timeCost=`awk -v x=$end -v y=$begin 'BEGIN{printf "%.2d\n",(x-y)/1000}'`

@H_404_16@

第三步:统计每条请求的响应时间,elapsed为响应时间、responseMessage为交易流水ID

cat result.jtl | awk '{print $1}' | awk -F "," '{print $2}' > timeCostDetails.log

cat result.jtl | awk '{print $1}' | awk -F "," '{print $2,$5}' > timeCostID.log

@H_404_16@

第四步:对timeCostDetails.log文件进行排序

sort -ntimeCostDetails.log > sort_timeCostDetails.log@H_404_16@

第五步:统计交易总数

line=`cat timeCostDetails.log | wc -l`

@H_404_16@

第六步:统计TPS

tps=`awk -v x=$line -v y=$timeCost 'BEGIN{printf "%.2d\n",x/y}'`@H_404_16@

第七步:统计AVG、MIN、MAX RT

avg=`cat sort_timeCostDetails.log | awk '{sum+=$1}END{print "",sum/'$line'}'` "ms"

min=`head -l sort_timeCostDetails.log` "ms"

max=`tail -l sort_timeCostDetails.log` "ms"

@H_404_16@

第八步:统计响应时间分布,下面例子为响应时间为80ms~90ms以及90ms~100ms的分布情况

cattimeCostDetails.log | awk '$1>80&&$1<=90{a+=1}$1>90&&$1<=100{b+=1}END{print "80ms ~ 90ms",a,a/'$line' "\n 90ms ~ 100ms",b,b/'$line'}'@H_404_16@

第九步:统计99%,99.9%响应时间分布(实际上为正向排序后,第99分位以及99.9分位对应的值)

percent99=0.99

percent999=0.999

aa=`awk -v x=$line -v y="$percent99" 'BEGIN{printf "%.2d\n",x*y}'`

bb=`awk -v x=$line -v y="$percent999" 'BEGIN{printf "%.2d\n",x*y}'`

echo "99%: " `sed -n "$aa"p sort_timeCostDetails.log` "ms"

echo "99.9%: " `sed -n "$bb"p sort_timeCostDetails.log` "ms"

@H_404_16@

将上述相关命令封装成shell脚本exec.sh,通过执行exec.sh result.jtl即可将相关结果分析出来,得到详细的性能报告。

猜你在找的Bash相关文章