lsekfe 发表于 2021-3-30 13:04:20

1分钟学会Linux下Jmeter分布式压测流程

最近公司要求要压测几个主要的借口,并且要输出最终的压测报告,因为压测报告要给甲方爸爸们看,让他们相信我们的服务是杠杠的,嘿嘿~。其实甲方爸爸们主要是想看服务器参数以及接口的负载能力(tps),于是我就压测了几个接口,发现了一些问题,针对有问题的接口做了一些优化。
  其实做一下压测是挺好的,可以发现很多测试环境不会出现的问题,比如可能缓存没命中,直接穿透到db等等。压测出来的结果,看到单机(4核8G)tps低于1000的,我们都进行了优化,tps怎么也要超过1000吧。因为一直都是使用jmeter来做压测,下面我们就来简单说一下jmeter压测的流程和一些注意事项。
  一、压测流程。
  1.在windows下面通过gui打开jmeter,创建测试计划以及压测脚本test.jmx,注意,动态配置的参数,可以使用变量来控制,以方面在linux下用命令行进行压测的时候,动态修改参数,如下图:
http://www.51testing.com/attachments/2021/03/15326880_20210323152333147re.png
图来自:https://www.cnblogs.com/ailiailan/archive/2019/09/17/11519976.html
  2.把test.jmx脚本文件放到linux服务器,使用以下命令进行压测(压测不建议使用gui模式运行,gui模式会占用一定的系统资源)。

  jmeter -n -t test.jmx -J threadNum=10 -J threadCount=2 -l result.jtl

  -n表示以no gui模式运行;
  -t指定脚本文件,这里是 test.jmx
  -J选项传递动态参数,对应创建jmx脚本的时候设置的相关参数
  -l是指定结果监听器(比如聚合报告之类的)文件,这里是result.jtl
  3.压测过程中输出的大概如下,可参考图中的备注理解每个字段的意思:
http://www.51testing.com/attachments/2021/03/15326880_2021032315234214JpI.jpg
图来自:https://www.bbsmax.com/A/Vx5MRkZ3dN
  4.压测结果如果要生成html形式的报告,使用以下命令可以将result.jtl文件生成html的形式。

  jmeter -g result.jtl -o ./html

  -g指定生成结果文件,这里是result.jtl;
  -o指定生成的html结果文件目录,注意是目录,这里是html目录,最终生成的html相关文件会放到html目录下面;
  如果result.jtl比较大的话,转换的过程可能有点慢,要等一下。生成的html要传到window端,用浏览器打开即可。
http://www.51testing.com/attachments/2021/03/15326880_202103231523541p5oQ.png
  生成的html相关文件
http://www.51testing.com/attachments/2021/03/15326880_2021032315240611ODt.jpg
浏览器打开html报告
  5.生成的result.jtl,可以传到windows本地,使用jmeter查看相关的结果,使用jmeter新建一个测试计划,然后在该测试计划下面创建对应的监听器之后,点击监听器右边的浏览按钮,选中result.jtl,打开就可以看到对应的result.jtl的结果,大概如下图:
http://www.51testing.com/attachments/2021/03/15326880_202103231524181I5w1.png
  图中的Thoughput就是tps,下面对聚合报告中的字段进行解读:
  Label:请求的名称,就是我们在进行测试的httprequest sampler的名称
  Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;
  Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒
  Median:50%用户的请求的响应时间,中位数
  90%Line:90%的请求的响应时间
  95%Line:95%的请求的响应时间
  99%Line:99%的请求的响应时间
  Min:最小的响应时间
  Max:最大的响应时间
  Error%:错误率=错误的请求的数量/请求的总数
  Throughput:默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  Received KB/sec:每秒从服务器端接收到的数据量,即:收到的千字节每秒的吞吐量测试
  Sent KB/sec:每秒从客户端发出的的数据量,即:发送的千字节每秒的吞吐量测试
  ps.
  1.jmeter在linux下的安装和配置教程,这里就不赘述了,网上很多教程
  2.jmeter压测脚本的编写,网上也很多教程~
  二、注意事项:
  1.有时候压测机(运行jmeter的机器)也会成为瓶颈,比如通过https进行压测的时候,压测机的cpu就直接100%了,如果是http的话就没问题,https是多了证书的加解密验证过程,挺耗cpu的。这时候可以通过几台机进行压测,jmeter原生支持分布式进行压测。
  2.尽量使用no gui的模式进行压测,同时压测机(运行jmeter的机器)要和接口服务器分开,jmeter进行压测的时候,也是很耗资源的。
  3.测试之后,如果某些接口tps很低,可以通过jprofile,jstack,jvisualVM之类的工具进行调优,接口response body很大的,可以考虑压缩之后再返回(比如tomcat,undertow等容器内部自带压缩机制)。
页: [1]
查看完整版本: 1分钟学会Linux下Jmeter分布式压测流程