[TOC]
大量TIME_WAIT出现场景
在高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接这个场景下,会出现大量socket处于TIMEWAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。
大量TIME_WAIT解决方案
应用层面
尽量避免频繁关闭连接,如业务优化,或者使用长连接等;
系统层面
- 缩短MSL时间。
- 增加可用端口数量。可用端口数量=单进程可打开的连接数量*机器数量。
危害
作为服务器,短时间内关闭了大量的Client连接,就会造成服务器上出现大量的TIME_WAIT连接,占据大量的tuple /tApl/ ,严重消耗着服务器的资源,此时部分客户端就会显示连接不上
每一个tcp连接关闭后,主动关闭方都会保留这个连接一段时间,这个时间内,这个连接的状态是TIME_WAIT,端口资源不会被释放。
解决方法:
1 | net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; |
简单来说,就是打开系统的TIMEWAIT重用和快速回收。