(45)负载测试中的错误

一个项目中, 不同的接口,支持的【最大可接受的并发用户数】 不相同的

  • 问: 项目能支持的最大可接受的并发用户数
    • 1、项目有很多接口,不是所有的接口都做性能测试
    • 2、我们现在做了那些业务的接口的性能测试
    • 3、在这些业务里面, 最好的接口能支持 最大可接受并发用户数, 最差的接口的最大可接受的并发用户数是多少
      • –体现出: 不同的接口,最大可接受的并发用户数是不一样的

项目做性能测试,不是所有的接口都要做性能测试。

  • kyj项目做性能测试过程中, 用自己的电脑, 在做的时候,会出现 :
    • 在调试脚本的时候,脚本都是成功的
    • 在低并发用户数的时候,请求的响应也都是成功的
    • 在并发用户数增大了之后,我们请求响应,有些开始出错了
      • tps图中,看到响应信息有连续出错,——说明有性能问题,可能是出现了拐点——可能是已经达到了最大可接受的并发用户数。

  • 监听器–GUI图形界面:
    • 活跃线程数
    • 响应时间图
    • tps图 -----tps出错,我们说可能有瓶颈
      • tps图中,看不到出错的原因
      • GUI界面中, 添加了 查看结果树 +勾选了仅错误日志

  • CLI-无图形界面
    • 要么打开 jtl文件
    • 要么把 jtl文件转换为 html报告(jmeter.bat -n -t vip16\fzcs.jmx -l vip16\jtl\fz-001.jtl -e -o vip16\report\001
    • html报告中,会告诉你,有哪些错误

  • 错误信息:
    • Address already in use: connect ----地址被用 ------不是服务器出错,而是 网络出错在这里插入图片描述

    • Read time out
    • connect refuse
      • 出现上述类似的错误,其原因,都是网络出错,不是服务器出错 ----所以,我们不能判断为服务器达到瓶颈
      • 上述错误,一般开始做性能测试,一定会遇到的。

  • 原因:
    • 我们一个http请求: 请求包 组成 源地址+源端口 +(数据包) + 目的地址 + 目的端口
    • 源端口数量是有限的
      • 这个限制,是因为,我们的电脑 位数 限制的 这个数量,最大只有 65535个, 每台机器都是这样,理论上的最大值。
      • 这个端口,一般情况下,没有全部开启(Windows相对开启的比较少、 linux开启的相对比多)——> 用linux做发起方的电脑,在没有改系统参数配置的情况下,能发起更多的情况。——>所以,我们一般在企业中,做性能测试,压力机一般选择用linux。
      • 每发送一个请求**,就会占用1个源端口。** 端口被占用之后,过一段时间,会自动释放。
        • http请求的时候,有三次握手。握手建立,就会占用源端口, 断开握手,** 过一段时间**,端口就会释放。

  • 解决办法:
    • 1、修改系统参数,把系统可用的端口全部开放,使用到理论上的最大的65535个。
      • 65535端口分为三段
        • 0~1023(共1024个), 为公认端口,紧密绑定在一些特定服务上,如 21、22、80
        • 1024~49151(共48127个),为注册端口,松散的绑定于一些服务上,如8080、3306
        • 49152~65535(共16384个),为动态或私有端口
    • 2、源端口被占用后,需要一段时间释放,我们修改系统参数把这个时间缩短,就可以提升,端口的复用率。-----相当于增加了端口
    • 3、把握手的占用时间缩短,也可以提升我们端口复用率。

    • 具体做法:
      • Windows: 修改系统参数
      • 注册表
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
        • 右侧,新增DWORD, name 为 MaxUserPort, value 为 65534(十进制),确定
        • 右侧,新增DWORD, name 为 TcpTimedWaitDelay, value 为 30(十进制),确定
          • 十进制的30, 是 最小有效值
      • 修改了注册表,建议要重启电脑
        ** **
      • http请求,keepalive 长连接, 去掉取样器中的 keepalive的复选勾 -----会对性能测试响应时间有影响,但是影响不大
        • 长连接 vs 短连接
          • 就是 在建立连接之后,保持连接的时长
            在这里插入图片描述
      • 这三个地方,不能缺

      • linux、mac:
        • 系统参数配置: sysctl -a -----这个是内存参数配置,是在系统启动的时候,读取到内存中的参数
          • 过滤下:sysctl -a | grep "net.ipv4"
          • net.ipv4.ip_local_port_range 参数,是 端口范围
            • 修改 sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1 
# 表示开启重用,允许将TIME- WAITsockets重新用于新的TCP连接,默认为0,表示关闭; 

sysctl -w net.ipv4.tcp_tw_recycle=1 
# 表示开启TCP连接中TIME- WAITsockets的快速回收,默认为0,表示关闭;
 
sysctl -w net.ipv4.tcp_fin_timeout=5 
# 修改系统默认的TIMEOUT时间 为5秒;调小 

sysctl -w net.ipv4.tcp_max_syn_backlog=8192 
# 进入syn包的最大请求 队列;调大 

sysctl -w net.ipv4.tcp_max_tw_buckets=5000 
# 表示系统同时保持 TIME_WAIT套接字的最大数量; 调小 

sysctl -p
# 配置生效
				请不要重启电脑 
修改jmeter的取样器的 keepalive 的复选框勾去掉

在这里插入图片描述


  • 如果被测项目,性能越好, 我们jmeter的放启方的支持的并发用户数量,越低; 被测项目性能越差,发起方的能支持的并发用户数越大。
    • 性能越好,-----响应时间就短
    • http协议,一定是 收到前一个请求的响应之后,才会发下一个请求。
    • 时间越短,短时间发送的请求量更多。----占用的源端口就会更多
    • 所以,我们发起方电脑,支持的并发用户数就会更低。
  • 所以,我们的发起方要用分布式来 一起产生更多的并发用户数。
    • 在做性能测试时,所有的分布式机器,都要进行端口、端口释放时间的修改

出现 Address already in use 类似的错误,大多数的原因,都是因为 ,发起方的电脑端口不够用,我们可以通过修改系统参数的方法,来缓解这个问题,但,不能说一定可以解决,如果还是出现,就只能用 发起方采用分布式 的方式。


Windows系统如何看当前占用的端口数量: netstat -ano |find “TCP” /i /c /i 忽略大小写 /c统计


  • linux系统 :
    • netstat -ano |grep “TCP”| wc -l
    • 或 ss -s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值