本文介紹Linux系統的ECS執行個體的/var/log/messages中,出現大量“TCP: time wait bucket table overflow”錯誤的原因和解決方案。
問題現象
Linux系統的ECS執行個體的/var/log/messages中,出現大量“TCP: time wait bucket table overflow”錯誤。
問題原因
出現該問題的原因是ECS執行個體中tcp的串連數太多,超出了net.ipv4.tcp_max_tw_buckets核心參數定義的值。
tcp_max_tw_buckets:表示系統同時保持TIME_WAIT狀態的Sockets最大數量,如果超過這個數字,TIME_WAIT狀態的Socket會被結束並且提示警示資訊。
net.ipv4.tcp_max_tw_buckets:設定該參數,是為了抵禦簡單的DDoS攻擊。若非業務需要,請不要降低此限制,如果網路條件需要比預設值高,將net.ipv4.tcp_max_tw_buckets參數的值調高或者增加記憶體。
解決方案
您可以調高net.ipv4.tcp_max_tw_buckets的值以解決此問題。
遠端連線ECS執行個體。
具體操作,請參見串連方式概述。
調整
net.ipv4.tcp_max_tw_buckets參數值。執行以下命令,編輯
sysctl.conf檔案。vim /etc/sysctl.conf按
i鍵進入編輯模式。根據業務需要,將
net.ipv4.tcp_max_tw_buckets參數的值調高。如下所示,將
net.ipv4.tcp_max_tw_buckets值設定為20000。net.ipv4.tcp_max_tw_buckets = 20000按
Esc鍵,輸入:wq儲存退出。執行以下命令,使配置生效。
sysctl -p
執行以下命令,可查看不同串連數的狀態。
netstat -an | grep 80 | awk '{print $6}' | sort | uniq -c | sort -rn