TIME_WAIT数量太多 造成SocketTimeoutException

1、压测问题

用户端下单流程”场景,5倍压力,tcp_time_wait打满6000
在这里插入图片描述

2 、方案1【配置长连接】

出现大量TIME_WAIT的情况:

  • keepalive_requests设置比较小,高并发下超过此值后
    nginx会强制关闭和客户端保持的keepalive长连接;
  • keepalive设置的比较小(空闲数太小),导致高并发下nginx
    会频繁出现连接数震荡(超过该值会关闭连接),不停的关闭、开启和
    后端server保持的keepalive长连接;
http {
   // 全局配置
   // 长连接响应timeout
  keepalive_timeout 60s; 
  // 与Client连接的"一个长连接"送达的最大请求数(默认是100)
  // 当送达的请求数超过该值后,该连接就会被关闭。
    keepalive_requests 8192; 
  
    upstream servers {
        server 127.0.0.1:7985 ;
        server 127.0.0.1:7986 ;
        // 如果空闲的keepalive连接大于该值,最近使用最少的连接将会被关闭。
        // 连接到上游服务器的最大空闲keepalive长连接数
        keepalive 200;
    }

    server {
      listen 8080;
      www.lonk.com 127.0.0.1;
      location / {
          proxy_pass http://servers;     
          // 长链接:使用1.1版本。
          proxy_http_version 1.1;
          // 允许重新定义或追加字段到传递给代理服务器的请求头信息
		  proxy_set_header Connection "";
		  // 请求数与超时时间
		  keepalive_requests 2000;
		  keepalive_timeout 120s;
      }
    }
}
2、方案2【Linux的Net配置】
tcp链接在经过四次握手结束连接后并不会立即释放,而是处于timewait状态,
会等待一段时间,以防止客户端后续的数据未被接收。
1. 调整tcp链接结束后等待时间: 
	#timewait 的数量,默认是 180000。
	net.ipv4.tcp_max_tw_buckets = 6000
	# 启用 timewait 快速回收。
	net.ipv4.tcp_tw_recycle = 1	
	#开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接。
	net.ipv4.tcp_tw_reuse = 1
尽量不要改动:
	https://coolshell.cn/articles/11564.html
4、Jmeter压测验证结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 补充

Elapsed time :从发送请求到收到最后的响应时间,所花费的时间。不包括渲染请求所花费的时间,同时也不包括处理客户端脚本所花费的时间。Sample time = Load time = Response time。
Latency:从发送请求到收到第一个响应,所花费的时间。网上还有种说法,就是响应信息越大,差别越大。
Connect Time:建立连接所花费的时间。包括SSL三次握手的时间。值的注意的latency没有减去建立连接花费的时间,当出现链接超时等错误,这个会等于链接超时时间

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值