减少 time_wait 连接数量

2022-10-01  本文已影响0人  wayyyy
问题场景

线上服务器使用nginx 做反向代理,访问链路:client -> nginx -> 服务器,在nginx 上经常出现大量的 time_wait 连接。

怎么查看 time_wait 连接
什么是 time_wait 连接
TCP连接关闭.png

通过上图,我们可以看到 TIME_WAIT 状态是在tcp断开链接时产生的,因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。
先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入 TIME_WAIT 状态,并且在此状态停留两倍的MSL时长。MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。

关于MSL的大小,RFC 793协议中给出的建议是两分钟,不过实际上不同的操作系统可能有不同的设置,以Linux为例,通常是半分钟,两倍的MSL就是一分钟,也就是60秒,并且这个数值是硬编码在内核中的,也就是说除非你重新编译内核,否则没法修改它。

如何优化 time_wait 过多的问题?

参考资料
1、https://cloud.tencent.com/developer/article/1589962#:~:text=%E4%BB%8E%E5%8C%BA%E5%88%AB%E4%B8%8A%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%87%BA,WAIT%E7%9A%84%E6%95%B0%E9%87%8F%E3%80%82

上一篇 下一篇

猜你喜欢

热点阅读