このトピックでは、次の問題の原因と解決策について説明します。Linux Elastic Compute Service (ECS) インスタンスの /var/log/messagesファイルに多数の「TCP: time wait bucket table overflow」エラーメッセージが表示されます。
問題の説明
Linux ECSインスタンスの /var/log/messagesファイルに多数の「TCP: time wait bucket table overflow」エラーメッセージが表示されます。
原因
ECSインスタンスでは、多数のTCP接続がTIME-WAIT状態になります。これは、net.ipv4.tcp_max_tw_buckets (またはtcp_max_tw_buckets) カーネルパラメーターで定義された上限を超えています。
tcp_max_tw_buckets: TIME_WAIT状態でサポートされるTCPソケットの最大数を示します。 最大数を超えると、システムはTIME_WAIT状態で過剰なソケットを停止し、「TCP: time wait bucket table overflow」エラーメッセージを生成します。
net.ipv4.tcp_max_tw_buckets: tcp_max_tw_bucketsパラメータと同じ機能を持ち、単純なDDoS攻撃から防御するために使用されます。 ビジネスで必要な値が小さい場合を除き、このパラメーターの値を下げないでください。 ネットワーク条件に基づいてデフォルト値より大きい値が必要な場合は、net.ipv4.tcp_max_tw_bucketsパラメーターの値またはメモリサイズを大きくします。
解決策
上記の問題を解決するには、net.ipv4.tcp_max_tw_bucketsパラメーターの値を増やします。
Linux ECSインスタンスに接続します。
詳細については、「接続方法の概要」をご参照ください。
net.ipv4.tcp_max_tw_bucketsパラメーターの値を変更します。次のコマンドを実行して、
sysctl.confファイルを開きます。vim /etc/sysctl.confIキーを押して挿入モードに入ります。ビジネス要件に基づいて、
net.ipv4.tcp_max_tw_bucketsパラメーターの値を増やします。この例では、
net.ipv4.tcp_max_tw_bucketsパラメーターの値を20000に変更します。net.ipv4.tcp_max_tw_buckets = 20000Escキーを押して:wqと入力し、enterキーを押してファイルを保存して終了します。次のコマンドを実行して、変更を有効にします。
sysctl -p
次のコマンドを実行して、接続統計を照会します。
netstat -an | grep 80 | awk '{print $6}' | sort | uniq -c | sort -rn