/proc/sys/net/ipv4/tcp_keepalive_time」です。 "; 2. "/etc/sysctl.conf" ファイルを編集します。構文は "net.ipv4.tcp_keepalive_time=指定された値" です。"/> /proc/sys/net/ipv4/tcp_keepalive_time」です。 "; 2. "/etc/sysctl.conf" ファイルを編集します。構文は "net.ipv4.tcp_keepalive_time=指定された値" です。">
解決策: 1. キープアライブ設定を適切な値に変更することで、ポート接続をすぐに解放できます。echo を使用して「set tcp_keepalive_time」を設定します。構文は、「echo "値を指定" > /proc/」です。 sys/ net/ipv4/tcp_keepalive_time"; 2. "/etc/sysctl.conf" ファイルを編集します (構文は "net.ipv4.tcp_keepalive_time=指定された値")。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
問題の説明
開発とテスト中に、接続が解放されていないことがわかりました。サーバーポートが切断され、再度接続されたときに拒否されました。
分析: ポートが 8080 であると仮定して、サーバー上のポート占有率を確認します。
netstat -anp |grep 8080
ポート 8080 が占有されていることがわかり (IP はローカル IP であり、最後の接続であると判断されます)、ステータスは ESTABLISHED ですが、実際には接続は切断されていますが、サーバーはは切断されていません。TCP キープアライブ設定を確認してください。
sysctl -a |grep keepalive
デフォルト設定であることが判明しました
net.ipv4.tcp_keepalive_time = 7200 net.ipv4.tcp_keepalive_probes = 9 net.ipv4.tcp_keepalive_intvl = 75
デフォルトでは、接続が 7200 秒または 2 時間アイドル状態になった後、接続ステータスを確認するためにキープアライブ検出パケットが送信されます。
解決策
解決策:
1. キープアライブ設定を適切な値に変更することで (200 秒に変更するなど)、ポート接続が確立されます。すぐに解放できます。
一時的な修正、echo 経由で tcp_keepalive_time を設定します。
echo "200" > /proc/sys/net/ipv4/tcp_keepalive_time
2.永続的に有効にするには、/etc/sysctl.conf を編集し、
net.ipv4.tcp_keepalive_time = 200
に追加または変更してからコマンドを実行して、変更した設定を有効にします
推奨される学習: Linux ビデオ チュートリアル
以上がLinux で TCP 接続が解放されない場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。