欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jmeter搭建压测十万接口的分布式环境

程序员文章站 2024-01-18 08:39:28
...
一、前言

        最近收到一个任务,需要压测某个后端服务接口,量级分别3W、6W、10W持续增量,然后就根据这个需求搭建了一个jmeter分布式负载机,其中也遇到不少坑,遂进行总结

二、搭建分布式负载机集群

本文采用A、B、C三台机器作为样式,A操控BC(集群)
A为操控机,IP 192.168.1.1
B为远程负载机,IP 192.168.1.2
C为远程负载机,IP 192.168.1.3
jmeter版本5.0

  1. 首先确保ABC三台机器jmeter版本都要一致,否则会出现问题
  2. 对A、B、C三台机器的jmeter文件进行解压,生成jmeter目录jmeter搭建压测十万接口的分布式环境
  3. 先修改A机器,进入到./apache-jmeter-5.0/bin目录下,执行./create-rmi-keystore.sh文件创建rmi连接**

jmeter4版本以后操控负载机需要建立RMI连接通讯,需要使用到**
**内存可以跳过,直到遇到提示no你选择yes,自己设置相应密码即可生成**,然后会在./bin目录下生成rmi_keystore.jks
jmeter搭建压测十万接口的分布式环境

  1. 将rmi_keystore.jks文件复制到BC两台机器的bin目录下即可
  2. 修改A机器的./bin/jmeter.properties配置文件
#控制的目标负载机的IP+端口,1099端口是jmeter-server启动的默认端口,后面会讲到
remote_hosts=192.168.1.2:1099,192.168.1.3:1099
#开启rmi连接
server.rmi.ssl.disable=true

7.然后修改vi ./bin/jmeter脚本文件(A、B、C均要修改)

#将默认的1g、256改成自己想要设置的大小,这是由于jmeter底层是java语言,所以创建并发用户需要耗费jvm堆内存大小资源,所以尽量设置大一点,否则你的并发用户数可能达不到你的预期量级
: "${HEAP:="-Xms3g -Xmx3g -XX:MaxMetaspaceSize=768m"}"
  1. 到这里A已经设置OK,去BC两台机器上修改配置,以B为例同样修改./bin/jmeter.properties配置文件
#开启rmi连接
server.rmi.ssl.disable=true
  1. 启动./bin/jmeter-server脚本
#当前机器IP
./jmeter-server -Djava.rmi.server.hostname=172.31.121.79 &
  1. 执行netstat -tnpl可以看到启动服务对应的端口,1099启动OK
    jmeter搭建压测十万接口的分布式环境
    11.然后将你录制的jmx的脚本放在你对应的目录下,我直接放在A机器的jmeter的bin目录下
    jmeter搭建压测十万接口的分布式环境
    12.在A机器中启动压测脚本操控负载机运行,./jmeter.sh -n -t maidian1.jmx -l ./result.jtl -r -e -o ./res

-n表示非GUI模式
-t表示要运行的jmx脚本文件路径
-l生成jtl文件
-r表示启动远程负载机,默认会去jmeter.properties文件去找remote_hosts配置好的地址
-e表示负载测试后生成报告
-o表示压测报告的输出目标文件夹

13.执行后控制台会出现如图所示输出,打印你连接的负载机,你的接口请求总量级
jmeter搭建压测十万接口的分布式环境
14.然后会在你指的的目录下生成res文件,这是生成的测试报告,打开里面的index.html文件或者将其部署到Tomcat容器都可以
jmeter搭建压测十万接口的分布式环境

三、报告生成内容字段解释

  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值。
  • #Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100。
  • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。
  • Median:中位数,也就是 50% 用户的响应时间。
  • 90%95%99% Line: 90% 95% 99% 用户的响应时间。
  • Min:最小响应时间。
  • Max:最大响应时间。
  • Error%:本次测试中出现错误的请求的数量/请求的总数。
  • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数。
  • Received KB/Sec:每秒从服务器端接收到的数据量。

四、踩坑的地方

  • 对操控机,负载机都要设置jvm内存大小,因为jmeter默认启动堆内存大小只有1g,元空间256m,可以根据当前机器内存大小进行适当调整,否则在run的时候会出现堆内存溢出的报错
  • 若压测的接口量级过高,可调高ramp-up的值来减轻操控机的负担,否则操控机的CPU会负载过高,且堆内存溢出错误。(我将操控机堆内存设置3G都没用)
  • 若并发用户数有指标要1W可以创建20台负载机每台分均500并发用户,负载机的配置1C2G足够,不建议单台负载机配置高并发用户设置高的情况