伺服器出現kernel: TCP: time wait bucket table overflow解決
阿新 • • 發佈:2019-02-08
#一臺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暫時是夠用了