一:搭建环境
- jdk安装+设置环境变量+验证:11.0.18版本
- jmeter安装+设置环境变量+验证:apache-jmeter-5.5
- secureCRT9.3安装
-
压测服务器配置:8核32G,网卡150兆Host hssh505应用服务器配置:8核64GHost hssh504
mysql服务器配置:8核16G,硬盘200G,最大连接数8000
二:接口数据
2.1:http请求头默认值
- 协议:Https
- 测试环境IP:test-console.dubbing.tech
- 生产环境IP:console.dubbing.tech
- 服务器域名:load-console.dubbing.tech
- 服务器新域名:180.184.143.173,port7777,协议http,路径无api
- 请求方式:post/get
- 登录/set specker激活音色(post)
- Get SpeckerList音色列表/Ping心跳检测(get)
2.2:接口路径
- Sdk登录:/api/sdkra/login
- Ping心跳检测:/api/sdkra/ping(可忽略)
- 音色列表:/api/sdkra/getSpeakerList
- 选择激活音色:/api/sdkra/setSpeaker (Content-Type:application/json)
2.3:http信息头管理器
2.3.1:四个接口都需添加,作用域为全局线程组
Authorization:
DubbingSdk access_key="abcde",timestamp="111",nonce="aaa",id="520",signature="9HenOZWwiBKK6Jm25s6iog4r1f8=",avc="151-2522"
2.3.2:setSpeaker选择激活音色,单独设置http信息头管理器
Content-Type:application/json
2.4:请求入参
setSpeaker选择激活音色:
{ "speakerId": 189 }
2.5:拷贝jmx
拷贝本地jmx文件至服务器:
- 默认root
- 进入目录 cd /home/sunlin/apache-jmeter-5.5/bin
- Put *.jmx
- ls验证拷贝结果
- lcd C:\Users\Administrator\Downloads\apache-jmeter-5.5\apache-jmeter-5.5\bin 在linux服务器远程看本地
lpwd看本地路径
lls远程看本地详情
- cd /home/sunlin/apache-jmeter-5.5/bin FTP窗口看本地linux服务器的路径
-
更改文件拥有者权限chown sunlin *.jmxchown sunlin:sunlin *.jmx
2.6:动态设置参数
jmeter -Jthreads=10 -Jcycle=10 -n -t dttest.jmx -l view.jtl -e -o /home/sunlin/apache-jmeter-5.5/bin/summary
三:测试环境
3.1:空跑基准压测
3.1.1:接口路径
/api/health /api/sdkra/pingpong(校验sign标签)
3.1.2:压测记录
随着负载并发增加,tps线性增加,符合预期
3.1.3:达到瓶颈
由于nginx上限18000,所以压测最多到18000则达到瓶颈:出现错误率
3.2:多接口压测
3.2.1:1并发,tps正常(音色列表优化前)
3.2.2:50并发,tps正常(音色列表优化前)
3.2.3:100并发(音色列表优化前)
3.2.4:100并发(音色列表优化后)响应时间明显增快
3.2.5:200并发,tps正常
3.2.6:300并发,tps降低,但由于响应时间增长,目前tps值属于正常现象
3.2.7:再次300并发,tps略微升高,考虑是由于网络原因导致tps小幅度波动,目前tps值均属正常
3.2.8:500并发,音色列表优化前
3.2.9:500并发,音色列表优化后,响应速度增快吞吐量增加,所以优化有明显效果
3.2.10:800并发出现异常并实行优化
查看结果树发现,响应数据报错:java.net.SocketException: Connection reset
解决方案:优化本地配置
新建txt,保存以下脚本修改后缀为reg文件,编辑值如下,保存后双击执行;重启电脑,再次压测即不会出现该报错。
解析中值为10进制,下方脚本已全转换为16进制。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
“MaxUserPort”=dword:fffe
“TcpTimedWaitDelay”=dword:1e
“TcpNumConnections”=dword:fffffe
“MaxFreeTcbs”=dword:7D0
“MaxHashTableSize”=dword:10000
内容解析:
MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)
MaxFreeTcbs:最大TCP控制块(1000-2000)
MaxHashTableSize:最大TCB Hash table数量(64-65536)
3.2.11:回归800并发无异常,优化有效果
3.2.12:优化login接口后800并发,响应时间变快但tps降低
3.2.13:达到瓶颈
并发数高于1000后tps过低,由于测试环境系统上限1024M,目前最高只能压到1000,考虑转移至预生产环境压测
四:预生产环境
同步定时器1000并发
3000并发出现异常,考虑单台电脑支撑不了大并发,准备分布式测试
五:分布式压测
5.1:Jmeter分布式压测原理
总控机器的节点master会把压测脚本发送到 slave上面
执行时,slave上只需要把jmeter-server打开即可,无需启动jmeter
结束后,slave会把压测数据回传给master,最后master汇总输出报告
5.2:主从测试机环境
- IP(Master):192.168.1.65 windows11
- IP(slave) : 192.168.1.193 mac
- 所有机器JDK版本:java version "11.0.18"
- 所有机器jmeter版本:apache-jmeter-5.5
- 网络环境:同一个局域网,有线网络
5.3:jmeter设置
5.3.1:步骤一
在IP(Master): 192.168.1.65 在jmeter.properties 中添加remote_hosts,添加内容如下两行:
- remote_hosts=192.168.1.65:1099,192.168.1.193:1099
- server_port=1099
5.3.2:步骤二
在IP(slave) :192.168.1.65 在jmeter.properties中添加 server_port
在IP(slave) :192.168.1.193在jmeter.properties中添加 server_port
5.3.3:步骤三
在IP(Master) 和 IP(slave) 机器上在jmeter.properties文件中
#server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true并保存(主从都改)
5.3.4:步骤四
- IP(Master) :192.168.1.65在jmeter-server 文件中:
#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
改为 RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.65,并保存
- IP(slave) :192.168.1.193在jmeter-server 文件中:
#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
改为 RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.193
5.3.5:步骤五
- IP(slave) :192.168.1.193,只需把jmeter-server打开即可,不用启动jmeter
- IP(Master):192.168.1.65如果也作为执行机,也需命令行打开jmeter-server
- IP(slave) :192.168.1.193,关闭防火墙
- IP(Master):ping执行机的ip验证机器在同一网络环境
- IP(Master):192.168.1.65打开jmeter,点击运行选择远程启动。
压测过程中执行机的命令行窗口会出现如下内容,主机可在jmeter查看聚合报告
六:分布式压测过程
6.1:远程启动
IP(Master):192.168.1.65打开jmeter,点击运行选择远程启动
出现报错如下:Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 192.168.1.65; nested exception is:
java.net.ConnectException: Connection refused: connect
6.1.1:排查分析执行机
远程启动IP(slave)192.168.1.193 成功运行
telnet 192.168.1.193 1099,提示不是内部命令;由于win11默认未安装telnet,可以手动安装;再次连接无误。
①、点击左下角的“搜索”图标,在弹出的对话框中输入“功能”,并进行搜索。系统会自动找到“启用或关闭windows功能”。
②、点击“启用或关闭windows功能”,在功能复选列表中找到“telnet客户端”功能,并勾选他。最后点击确定,系统自动进行安装该组件。
装好后,再回到命令行执行telnet命令,则不会出错。若是较老版本的windows,需依次进入“控制面板>程序与功能>启用或关闭windows功能”进行操作。
6.1.12:排查分析调度机
IP(Master):192.168.1.65作为调度机,也作为执行机,所以也需打开jmeter-server,再次运行无误