zoukankan      html  css  js  c++  java
  • TCP: time wait bucket table overflow解决方法

    /var/log/messages 中出现大量的

    TCP: time wait bucket table overflow

    引起该现象的原因是服务器tcp的连接数太多,超出了内和定义的最大数

    临时改变使用

    # echo 20000 > /proc/sys/net/ipv4/tcp_max_tw_buckets

    永久有效可如下

    #vim /etc/sysctl.conf
    
    net.ipv4.tcp_max_tw_buckets = 20000
    
    
    # sysctl -p

    执行命令

    netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn

    可统计当前个连接的个数

    以下引用其他文章

    http://blog.sina.com.cn/s/blog_4e46604d0102vaf1.html

    故障表现:

    一:系统日志频繁出现:kernel: TCP: time wait bucket table overflow

    二:服务器连接中,有大量TIME_WAIT

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    TIME_WAIT 5009

    FIN_WAIT1 19

    ESTABLISHED 3

    FIN_WAIT2 2

    SYN_RECV 14

    CLOSING 146

    LAST_ACK 1

    解决方案:

    vi /etc/sysctl.conf

    增加以下几行:

    net.ipv4.tcp_fin_timeout = 30

    net.ipv4.tcp_keepalive_time = 1200

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.ip_local_port_range = 1024 65000

    net.ipv4.tcp_max_syn_backlog = 8192

    net.ipv4.tcp_max_tw_buckets = 5000 ##已经修改

    说明:

    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 = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

    net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

    net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

    net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

    net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参 数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

    执行以下命令使配置生效:

    sysctl -p

    观察几分钟后,报错消失,TIME_WAIT连接数减少了。

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    TIME_WAIT 3647

    SYN_SENT 1

    FIN_WAIT1 14

    ESTABLISHED 2

    FIN_WAIT2 2

    SYN_RECV 17

    CLOSING 132

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/lovemyspring/p/4334508.html
Copyright © 2011-2022 走看看