测试时大量TIME_WAIT CLOSE_WAIT

客户端方面

在进行TCP短连接测试时

TCP客户端在段时间内向服务端建立大量的连接

在程序运行一段时间后出现 connection refusaued 错误。

这是由于客户端每建立一个TCP连接需要一个端口,即便客户端关闭了TCP连接完成了4次挥手,操作系统任然会保留一段时间的这个连接。

[1]

在这里插入图片描述

该问题可以通过配置Linux的端口重用参数来实现对处于 TIME_WAIT 状态下的端口的重用

sudo echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

在这里插入图片描述

服务端方面

若服务端上出现了大量的 CLOSE_WAIT,那么将会导致文件打开上限进而导致 连接速度急剧下降

原因是由于服务端在收到客户端连接关闭后没有关闭对应Socket的连接导致。

这时候请检查服务端是否在有在客户端连接关闭,但是服务端没有关闭这个连接的情况。

当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。 —— [4]

参考文献

[1]. golang 大量 TIME_WAIT . 明月几时有 . 2019-11 . https://zjj2wry.github.io/post/golang/time-wait/

[2]. linux . man . https://man7.org/linux/man-pages/man7/tcp.7.html

[3]. 博客园 . 高并发情况下Linux系统及kernel参数优化 . 详 . 2020-09 . https://www.cnblogs.com/txlsz/p/13683892.html

[4]. 博客园 . linux server 产生大量 Too many open files CLOSE_WAIT激增 . Bigben . 2017.06 . https://www.cnblogs.com/bigben0123/p/6932217.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值