############### 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 小时