TCP连接常见问题

time_wait产生过多
-
问题:
如果系统在短时间内出现大量的短连接,客户端的socket资源可能会很快耗尽,都卡在time_wait阶段得不到释放
-
解决方案:
-
调整短连接为长连接
-
打开系统timewait重用和快速回收
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间
-
close_wait过多
-
问题:
cloase_wait过多说明服务端卡在发送FIN包阶段,迟迟未能发送FIN包。
-
解决方案:
- 业务层面:检查socket调用后是否close;socket读取到长度为0立即close;如果read返回-1,出现错误,检查error返回码,有三种情况:
INTR(被中断,可以继续读取),WOULDBLOCK(表示当前socket_fd文件描述符是非阻塞的,但是现在被阻塞了),AGAIN(表示现在没有数据稍后重新读取)。如果不是AGAIN,立即close - 设置TCP连接时长
keep_alive_time监控tcp连接频率,多长时间没有连接就关闭
- 业务层面:检查socket调用后是否close;socket读取到长度为0立即close;如果read返回-1,出现错误,检查error返回码,有三种情况:

浙公网安备 33010602011771号