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返回码,有三种情况:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?