WEB服务器TCP:time wait&nbsp…

WEB服务器TCP:time wait bucket table overflow报错排查
 
日志巡检发现,公司web服务器一直报错,信息如下:
 
Jul   5 15:40:37 mail kernel: printk: 272 messages suppressed.
Jul   5 15:40:37 mail kernel: TCP: time wait bucket table overflow
Jul   5 15:40:37 mail kernel: TCP: time wait bucket table overflow
Jul   5 15:40:43 mail kernel: printk: 92 messages suppressed.
Jul   5 15:40:43 mail kernel: TCP: time wait bucket table overflow
                                                  (TCP:时间等待桶表)
    www.2cto.com  
根据报错提示,需要更改net.ipv4.tcp_max_tw_buckets这个内核参数。这个参数是 系统同时保持timewait套接字的最大数量。如果超过这个数字,time-wait套接字将立刻被清除并打印警告信息。这个限制仅仅是为了防止简单的 DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,如果网络实际需要大于缺省值,更应该增加这个值(如果增加了内存之后)。
解决方法:增大 tcp_max_tw_buckets的值,并不是这个值越小越好,我看了我系统中TIME_WAIT 大部是由php-fpm产生的,是属于正常的现象
 
系统在同时所处理的最大timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要人为的降低这个限制﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。
 
netstat -an | grep 9000 | awk '{print $6}' | sort | uniq -c | sort -rn
netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn
  www.2cto.com  
排查步骤:
 
1. 查看服务器网络连接情况;
 
[root@mail ~]#   netstat -pant |awk '/^tcp/ {++state[$6]} END {for(key in state) printf("%-10s\t%d\n",key,state[key]) }'
TIME_WAIT       4944
CLOSE_WAIT       1
FIN_WAIT1       93
FIN_WAIT2       66
ESTABLISHED     292
SYN_RECV         29
CLOSING         32
LAST_ACK         9
LISTEN           14
[root@mail ~]#
  www.2cto.com  
2.查看内核参数
vi /etc/sysctl.conf
 
将net.ipv4.tcp_max_tw_buckets = 5000
 
改为:net.ipv4.tcp_max_tw_buckets = 10000
 
3.使更改的内核参数生效
sysctl -p
 
4. 再次查看服务器网络连接情况;
 
[root@mail ~]#   netstat -pant |awk '/^tcp/ {++state[$6]} END {for(key in state) printf("%-10s\t%d\n",key,state[key]) }'
TIME_WAIT       6644 
CLOSE_WAIT       1
FIN_WAIT1       93
FIN_WAIT2       66
ESTABLISHED     292
SYN_RECV         29
CLOSING         32
LAST_ACK         9
LISTEN           14
 
5.
#再看/var/log/messages和dmesg的信息,已经不再报错了,看来net.ipv4.tcp_max_tw_buckets=10000暂时是够用了
  www.2cto.com  
6.原因
 
    服务器的TCP连接数,超出了内核定义最大数。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值