全部產品
Search
文件中心

:為什麼Linux系統的ECS執行個體中出現大量“TCP: time wait bucket table overflow”錯誤?

更新時間:Jul 31, 2024

本文介紹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的值以解決此問題。

  1. 遠端連線ECS執行個體。

    具體操作,請參見串連方式概述

  2. 調整net.ipv4.tcp_max_tw_buckets參數值。

    1. 執行以下命令,編輯sysctl.conf檔案。

      vim /etc/sysctl.conf
    2. i鍵進入編輯模式。

    3. 根據業務需要,將net.ipv4.tcp_max_tw_buckets參數的值調高。

      如下所示,將net.ipv4.tcp_max_tw_buckets值設定為20000。

      net.ipv4.tcp_max_tw_buckets = 20000
    4. Esc鍵,輸入:wq儲存退出。

    5. 執行以下命令,使配置生效。

      sysctl -p
  3. 執行以下命令,可查看不同串連數的狀態。

    netstat -an | grep 80 | awk '{print $6}' | sort | uniq -c | sort -rn