Linux カーネルでは、TCP/IP プロトコルは接続を 60 秒間 TIME-WAIT 状態に保ちます。デフォルトでは、この期間は変更できません。TCP ワークロードが高いシナリオでは、この値を小さくするとネットワークパフォーマンスが向上する可能性があります。そのため、Alibaba Cloud Linux 2 (カーネルバージョン 4.19.43-13.al7 以降) および Alibaba Cloud Linux 3 は、TCP TIME-WAIT 期間を変更するためのカーネルインターフェイスを提供します。これにより、ネットワークパフォーマンスとリソース使用率が向上します。
このシステム構成は Alibaba Cloud Linux 4 では非推奨です。
背景情報
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」をご参照ください。
Alibaba Cloud Linux の TIME-WAIT 状態の接続数は、CentOS 7 などの他のディストリビューションよりも多い場合があります。これは正常であり、`tcp_tw_reuse` (詳細については、「システム構成の最適化」をご参照ください。) や `tcp_tw_recycle` (詳細については、「Alibaba Cloud Linux 3 と CentOS 7 の違い」をご参照ください。) などのカーネルバージョンとパラメーター設定の違いによって発生します。
Alibaba Cloud Linux のデフォルト構成では、TIME-WAIT 状態の接続数は 5,000 を超えません。ネットワークパフォーマンスへの影響はごくわずかです。
構成メソッド
以下のいずれかのメソッドを使用して、TCP TIME-WAIT タイムアウトを変更できます。メソッドで使用されるコマンドでは、[$TIME_VALUE] を値に置き換えて TCP TIME-WAIT タイムアウトを変更します。
TCP TIME-WAIT タイムアウト ([$TIME_VALUE]) を変更すると、ビジネスが利用できなくなったり、中断されたりする可能性があります。この操作はオフピーク時に実行することをお勧めします。
sysctlコマンドを使用して TIME-WAIT タイムアウトを変更できます。この変更はすぐに有効になりますが、システムの再起動後は維持されません。sudo sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]"echoコマンドを使用して、/proc/sys/net/ipv4/tcp_tw_timeoutファイルに値を書き込むことができます。この変更はすぐに有効になりますが、システムの再起動後は維持されません。sudo sh -c "echo [$TIME_VALUE] > /proc/sys/net/ipv4/tcp_tw_timeout"/etc/sysctl.confファイルを編集して、net.ipv4.tcp_tw_timeoutパラメーターを変更できます。この変更はすぐに有効になり、システムの再起動後も維持されます。ステップは次のとおりです:次のコマンドを実行して sysctl.conf ファイルを開きます:
sudo vim /etc/sysctl.confI キーを押して挿入モードに入ります。ファイルの末尾に次の行を追加または変更します:
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 コマンドを実行して、サーバー上に多くの短命な接続が存在するかどうかを確認できます。
NGINX にレイヤー 7 プロキシが構成されている場合など、多くの短命な接続が存在する場合は、[$TIME_VALUE] を 5 に置き換えて、TCP TIME-WAIT タイムアウトを 5 秒に設定することをお勧めします。