Linux 环境下,TCP: time wait bucket table overflow 问题及解决

############### TCP: time wait bucket table overflow 问题


############### 查询统计网络状态命令
netstat -an | awk '{print $6}' | sort | uniq -c | sort -rn
############### 返回以下结果
    148 ESTABLISHED
     88 TIME_WAIT
     28 CLOSE_WAIT
     14 LISTEN
     10
      4 STREAM
      4 CONNECTED
      3 FIN_WAIT2
      1 I-Node
      1 Foreign
      1 established)
      1 and
      1 8216
      1 8046
      1 7725
      1 6688
      1 6687
      1 6674
      1 128610281

      
############### 有两种可能原因:
1) 处于time wait状态的tcp套接字,超过net.ipv4.tcp_max_tw_buckets限制
2) 申请内存失败,可能原因为内存不足

############### 解决方法:
vi /etc/sysctl.conf
###############  修改下面参数:
net.ipv4.tcp_max_tw_buckets = 50000
调大timewait 的数量

net.ipv4.tcp_fin_timeout = 10  
如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。

net.ipv4.tcp_tw_recycle= 1   
启用timewait 快速回收

net.ipv4.tcp_tw_reuse = 1    
开启重用,允许将TIME-WAIT sockets 重新用于新的TCP 连接

net.ipv4.tcp_keepalive_time = 15  
当keepalive 启用的时候,TCP 发送keepalive 消息的频度,缺省是2 小时

你可能感兴趣的:(其他)