zoukankan      html  css  js  c++  java
  • Socket 连接问题之大量 TIME_WAIT

    简评:最近项目就出现了大量短连接导致建立新连接超时问题,最后是通过维护长连接解决的。

    代理或者服务器设备都有端口限制,如果使用 TCP 连接,连接数量达到端口限制,在这种情况下,将不能创建新的连接。

    TIME-WAIT

    这是 TCP 连接完全关闭前的最后一个状态,一个连接被关闭时,主动关闭的一端最后会进入 TIME_WAIT 状态,等待足够的时间以确保远程 TCP 接收到连接中断请求的确认,这个时间最大为四分钟,可调整。

    如何检测

    Kernel 信息:
    kernel: TCP: request_sock_TCP: Possible SYN flooding on port 8009. Sending cookies. Check SNMP counters.

    检查连接 TIME_WAIT 状态个数
    watch -n 1 "netstat -nt | grep TIME_WAIT | wc -l"

    如果数量接近端口限制,则系统将受到此问题的影响
    cat /proc/sys/net/ipv4/ip_local_port_range

    解决办法

    1.开启 TIME_WAIT 重用
    默认情况下,Linux 会从临时端口范围中选择一个端口,临时端口范围在 32768 至 61000之 间。除非设置了 SO_REUSEADDR 标志,否则已绑定的 TCP 本地地址端口在关闭后一段时间内不可用。使用此标志时请谨慎,因为它会使 TCP 连接变的不可靠。

    为了避免等待关闭同时启用 TIME_WAIT 的重用,可以向文件 /etc/sysctl.conf 添加以下行来开启:
    net.ipv4.tcp_tw_reuse = 1

    2.短连接变长连接
    如果有高并发请求功能,服务端是自己的服务器时,TCP 通信最好采用长连接,避免大量短连接每次建立/释放产生的各种开销;如果建立连接的目标服务器不是自己的,那就要考虑对方是否支持长连接方式。

    原文链接:What you need to do if you see too many TIME_WAIT sockets

  • 相关阅读:
    最漂亮( iTerm2+oh-my-zsh配色)
    python对excel的操作
    appium环境搭建
    Python单元测试unittest
    git命令日常总结
    mongon数据库的查询样例
    组合逻辑电路笔记
    Jlink驱动下载
    机组笔记
    计算机网络随笔(一部分知识点)
  • 原文地址:https://www.cnblogs.com/jpush88/p/11229952.html
Copyright © 2011-2022 走看看