文档章节

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

码农严选
 码农严选
发布于 2017/06/13 13:15
字数 672
阅读 170
收藏 6

用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,0,0,46,46,0,0,0

1497267848112,141,pay,,2017061219425306104aefto0111004,线程组 1-2,,true,0,0,45,45,0,0,0

1497267944837,145,pay,,2017061219425306104yuXae0111206,线程组 1-2,,true,0,0,42,42,0,0,0

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

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

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

第二步:统计从第一次请求完成,到最后一次请求结束,整个压测过程的总时间(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}'`

第三步:统计每条请求的响应时间, 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

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

sort -n timeCostDetails.log > sort_timeCostDetails.log

第五步:统计交易总数

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

第六步:统计TPS

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

第七步:统计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"

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

cat timeCostDetails.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'}'

第九步:统计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"

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

© 著作权归作者所有

码农严选
粉丝 7
博文 28
码字总数 17052
作品 0
西城
个人站长
私信 提问
阿里巴巴在开源压测工具 JMeter 上的实践和优化

本文是 《如何做好性能压测》系列专题分享的第三期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性...

中间件小哥
07/09
0
0
maxscale配合MHA搭建读写分离的高可用架构(基于GTID replication主从架构,mysql5.6)

基于GTID的主从replication并配合MHA搭建高可用架构,请参考之前的博客:http://linzhijian.blog.51cto.com/1047212/1906434。这里只叙述如何在此基础上增加maxscale中间件,实现读写分离的功...

Jenkin_lin
2017/04/07
0
0
ceph性能测试cosbecnch自动化

1、使用CosBench测试完成ceph的基准性能报告,手工收集ceph主机的IO/CPU/disk负载数据 通过看COSBenchUserGuide.pdf学习部署过程,完全参考该文档即可轻松部署。经过测试librados-config-sam...

惊浪
2015/03/10
969
0
独步双十一 电商平台全链路压力测试案例实战

最近,各大电商平台的运营和技术部门都异常忙碌,全力备战即将到来的网购狂欢季——双十一、双十二、黑色星期五……然而过去几年一些失败的大促经验告诉我们,让消费者心情愉悦的埋单并非易事...

cloudwiseAPM
2016/10/21
472
0
大促之前 必先压测--压测宝助您决战双11

双11狂欢节,面对霸气登场的流量,你的系统扛得住吗? 熬了多少个日夜的活动统终于快上线了,不知道上线后系统负载能力怎样? 亚马逊1秒钟的访问延迟,将带来每年16亿美元的巨额损失; 沃尔玛...

cloudwiseAPM
2016/10/20
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部