您的位置:首页 > 理论基础 > 计算机网络

WEB服务器TCP:time wait&nbsp…

2016-03-04 10:05 537 查看
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连接数,超出了内核定义最大数。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: