Linuxカーネルでは、TCP/IP接続は60秒間TIME-WAIT状態のままです。 TCP/IP接続がtime-WAIT状態のままである期間を変更することはできません。 ただし、TCPワークロードが重いシナリオなどの特定のシナリオでは、ネットワークパフォーマンスとリソース使用率を改善するために期間を短縮する必要があります。 カーネルバージョン4.19.43-13.al7
で始まるAlibaba Cloud Linux 2とAlibaba Cloud Linux 3は、TCP接続がtime-WAIT状態のままである期間を変更するために使用できるカーネルインターフェイスを提供します。
背景情報
TIME − WAITは、TCP/IPスタック内のソケットの遷移状態である。 アプリケーションがソケットを閉じた後、ソケットはTIME-WAIT状態のままで、60秒間開いたままになり、サーバーとクライアントのデータ転送が完了します。 多数のTCP接続がTIME − WAIT状態にある場合、ネットワーク性能が損なわれる可能性がある。 Alibaba Cloud Linuxは、同時実行性の高いシナリオなどの特定のシナリオでネットワークパフォーマンスを向上させるために、TCP TIME-WAITタイムアウトを変更するために使用されるカーネルインターフェイスを提供します。 TCP TIME − WAITタイムアウトは、TCP接続がtime − WAIT状態のままである期間を示す。 カーネルインターフェイスの値は1〜600です。 単位は秒です。
使用上の注意
60秒未満のTCP TIME − WAITタイムアウトは、TCP/IPクワイエットタイム制限に違反し、古いデータが新しいデータとして受け入れられるようにするか、または複製された新しいデータが古いデータとして拒否されるようにする。 Alibaba Cloud技術者のアドバイスに基づいて、TCP TIME-WAITタイムアウトを変更することを推奨します。 TCP/IPの静かな時間については、IETF RFC 793を参照してください。
設定方法
次のいずれかの方法を使用して、TCP TIME-WAITタイムアウトを変更できます。 メソッドで使用されるコマンドで、[$TIME_VALUE] を値に置き換えて、TCP TIME-WAITタイムアウトを変更します。
TCP TIME-WAITタイムアウト ([$TIME_VALUE]) を変更すると、ビジネスが利用できなくなるか、中断される可能性があります。 この操作は、オフピーク時に実行することを推奨します。
sysctl
コマンドを実行して、TCP TIME-WAITタイムアウトを変更します。 この方法を使用してTCP TIME-WAITタイムアウトを変更すると、変更はすぐに有効になりますが、永続化できません。sudo sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]"
echo
コマンドを実行して、/proc/sys/net/ipv4/tcp_tw_timeout
インターフェイスのTCP TIME-WAITタイムアウトを変更します。 この方法を使用してTCP TIME-WAITタイムアウトを変更すると、変更はすぐに有効になりますが、永続化できません。sudo sh -c "echo [$TIME_VALUE] > /proc/sys/net/ipv4/tcp_tw_timeout"
/etc/sysctl.conf
ファイルを変更して、net.ipv4.tcp_tw_timeout
パラメーターの値を変更します。 この方法を使用してTCP TIME-WAITタイムアウトを変更すると、変更はすぐに有効になり、永続化できます。 この変更は、システムの再起動後も有効です。 次の操作を実行します。次のコマンドを実行して、sysctl.confファイルを開きます。
sudo vim /etc/sysctl.conf
Iキーを押して挿入モードに入ります。 ファイルの末尾にある次の行を追加または変更します。
net.ipv4.tcp_tw_timeout = [$TIME_VALUE]
Esc
キーを押して:wq
と入力し、enter
キーを押して変更を保存し、ファイルを閉じます。変更を有効にするには、次のコマンドを実行します。
sudo sysctl -p
次のコマンドを実行して、net.ipv4.tcp_tw_timeoutパラメーターの現在の値を取得します。
sysctl net.ipv4.tcp_tw_timeout
netstat -ant | grep TIME_WAIT | wc -lコマンドを実行して、サーバー上に多数の短命接続が存在するかどうかを確認できます。
レイヤ7プロキシがNGINXに設定されている場合など、多数の短命接続が存在する場合は、[$TIME_VALUE] を5に置き換えて、TCP TIME-WAITタイムアウトを5秒に設定することをお勧めします。