(SDK)服务端压测报告

发布时间 2023-07-14 16:33:17作者: 琳达的博客
 
 

一:搭建环境

  • jdk安装+设置环境变量+验证:11.0.18版本
  • jmeter安装+设置环境变量+验证:apache-jmeter-5.5
  • secureCRT9.3安装
  • 压测服务器配置:8核32G,网卡150兆
      Host hssh505 
     
      应用服务器配置:8核64G
      Host 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:接口路径

 

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 *.jmx
      chown 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,再次运行无误