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连接数,超出了内核定义最大数。
日志巡检发现,公司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连接数,超出了内核定义最大数。
相关文章推荐
- web性能测试工具-http_load
- HTTP协议详解(真的很经典)
- 网络安全运维
- iOS实际网络检测框架RealReachability
- uploadify3.1--3.2 HTTP&nbsp…
- http请求中application/x-www-form…
- 【HTTP】http重定向301/302/303/307
- 常见HTTP状态码
- Web服务器性能/压力测试工具http_l…
- PHP的$_SERVER['HTTP_H…
- PHP实现http与https转化
- NSCache和NSURLCache网络缓存优化
- 高效的使用okhttp
- BASIC HTTP AUTHENTICATION ON ANDROID
- Web服务器处理HTTP压缩之gzip、deflate压缩
- 网络协议纵览
- Owin的URL编码怎么搞?以前都是HttpUtility.UrlEncode之类的,现在连system.web都没了,肿么办?
- 路由器WAN口IP显示为10、100、172开头,网络被电信联通等运营商做了NAT转发
- CentOS修改主机名和网络信息
- CDN内容发布网络