TCP连接常见问题

image

time_wait产生过多

  1. 问题:

    如果系统在短时间内出现大量的短连接,客户端的socket资源可能会很快耗尽,都卡在time_wait阶段得不到释放

  2. 解决方案:

    • 调整短连接为长连接

    • 打开系统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过多

  1. 问题:

    cloase_wait过多说明服务端卡在发送FIN包阶段,迟迟未能发送FIN包。

  2. 解决方案:

    • 业务层面:检查socket调用后是否close;socket读取到长度为0立即close;如果read返回-1,出现错误,检查error返回码,有三种情况:INTR(被中断,可以继续读取),WOULDBLOCK(表示当前socket_fd文件描述符是非阻塞的,但是现在被阻塞了),AGAIN(表示现在没有数据稍后重新读取)。如果不是AGAIN,立即close
    • 设置TCP连接时长keep_alive_time监控tcp连接频率,多长时间没有连接就关闭
posted @   ArthurFleck  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示