1. 程式人生 > >伺服器出現kernel: TCP: time wait bucket table overflow解決

伺服器出現kernel: TCP: time wait bucket table overflow解決

#一臺Nginx+php-fcgi的伺服器做了負載均衡,在主控端發現一直在報錯:

01 #----------------------------引用文字-開始----------------------------
02 Apr 19 14:48:38chengyongxu.com kernel: TCP: time wait buckettable overflow
03 Apr 19 14:48:44chengyongxu.com kernel: printk: 137 messagessuppressed.
04 Apr 19 14:48:44chengyongxu.com kernel: TCP:
time wait buckettable overflow
05 Apr 19 14:48:52chengyongxu.com kernel: printk: 251 messagessuppressed.
06 Apr 19 14:48:52chengyongxu.com kernel: TCP: time wait buckettable overflow
07 Apr 19 14:48:53chengyongxu.com kernel: printk: 51 messages suppressed.
08 Apr 19 14:48:53chengyongxu.com kernel: TCP:
time wait buckettable overflow
09 Apr 19 14:48:59chengyongxu.com kernel: printk: 119 messagessuppressed.
10 #----------------------------引用文字-結束----------------------------

#再看80埠連線狀態

01 netstat-an | grep 80 |awk '{print $6}' |sort | uniq-c | sort -rn
02 #----------------------------引用文字-開始----------------------------
03 4202TIME_WAIT
04 30FIN_WAIT1
05 9ESTABLISHED
06 5SYN_RECV
07 4LISTEN
08 4FIN_WAIT2
09 4CLOSING
10 2CONNECTED
11 2
12 #----------------------------引用文字-結束----------------------------

#根據報錯提示,需要更改net.ipv4.tcp_max_tw_buckets這個核心引數。這個引數是系統同時保持timewait套接字的最大數量。如果超過這個數字,time-wait套接字將立刻被清除並列印警告資訊。這個限制僅僅是為了防止簡單的DoS攻擊,你絕對不能過分依靠它或者人為地減小這個值,如果網路實際需要大於預設值,更應該增加這個值(如果增加了記憶體之後)。

01 vi/etc/sysconfig/sysctl.conf
02 #----------------------------引用文字-開始----------------------------
03 #找到:
04 net.ipv4.tcp_max_tw_buckets = 6000
05 #改為
06 net.ipv4.tcp_max_tw_buckets = 10000
07 #----------------------------引用文字-結束----------------------------
08 #儲存並列印設定
09 sysctl -p
10
11 #再看80埠連線狀態
12 netstat-an | grep 80 |awk '{print $6}' |sort | uniq-c | sort -rn
13 #----------------------------引用文字-開始----------------------------
14 5928TIME_WAIT
15 42FIN_WAIT1
16 14ESTABLISHED
17 10FIN_WAIT2
18 6CLOSING
19 4SYN_RECV
20 4LISTEN
21 2CONNECTED
22 2
23 #----------------------------引用文字-結束----------------------------
24 netstat-an | grep 80 |awk '{print $6}' |sort | uniq-c | sort -rn
25 #----------------------------引用文字-開始----------------------------
26 5510TIME_WAIT
27 34FIN_WAIT1
28 9SYN_RECV
29 9ESTABLISHED
30 7FIN_WAIT2
31 6CLOSING
32 4LISTEN
33 2CONNECTED
34 2
35 #----------------------------引用文字-結束----------------------------
36 netstat-an | grep 80 |awk '{print $6}' |sort | uniq-c | sort -rn
37 #----------------------------引用文字-開始----------------------------
38 5687TIME_WAIT
39 38FIN_WAIT1
40 16ESTABLISHED
41 10SYN_RECV
42 6FIN_WAIT2
43 6CLOSING
44 4LISTEN
45 2CONNECTED
46 2
47 #----------------------------引用文字-結束----------------------------
48 netstat-an | grep 80 |awk '{print $6}' |sort | uniq-c | sort -rn
49 #----------------------------引用文字-開始----------------------------
50 5688TIME_WAIT
51 38FIN_WAIT1
52 19ESTABLISHED
53 9SYN_RECV
54 6FIN_WAIT2
55 6CLOSING
56 4LISTEN
57 2CONNECTED
58 2
59 #----------------------------引用文字-結束----------------------------

#再看/var/log/messages和dmesg的資訊,已經不再報錯了,看來net.ipv4.tcp_max_tw_buckets=10000暫時是夠用了