解決策 1:
# record what tcp_max_orphans's current value
original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans)
#set the tcp_max_orphans to 0 temporarily
echo 0 > /proc/sys/net/ipv4/tcp_max_orphans
# watch /var/log/messages
# it will split out "kernel: TCP: too many of orphaned sockets"
# it won't take long for the connections to be killed
# restore the value of tcp_max_orphans whatever it was before.
echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans
# verify with
netstat -an|grep FIN_WAIT1
解決策 2:
/proc/sys/net/ipv4/tcp_fin_timeout
でタイムアウトを設定できるはずです .
手動でソケットをクリアする方法はないようです。
解決策 3:
tcp_orphan_retries 設定は、サーバーレス ポートが解放されるまでに実行される試行回数を制御しているようです。ここでは 0 でしたが、1 に設定するとポートがなくなりました。
HTH
解決策 4:
/proc/sys/net/ipv4/tcp_fin_timeout
FIN-WAIT-1 ではなく、FIN-WAIT-2 状態のタイムアウトです。 tcpkill ルートを使用するか、/proc/sys/net/ipv4/tcp_keepalive_*
以下のキープアライブ時間を試してみてください。 SOによる殺害を強制する。
解決策 5:
これらの手順をルート ID で実行すると、クリアされました:
カーネル設定をキャプチャして変数に変更する
$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')
最大孤立者数を一時的に 0 に設定
$ sysctl -w net.ipv4.tcp_max_orphans=0
問題のあるポートが使用されていないことを確認してください
$ netstat -np|grep 9716
少し待ってから、上記のコマンドが行を返さなくなるまで、必要に応じて上記の手順を繰り返します
tcp_max_orphans カーネル パラメータを上記の変数から元の値にリセットします
$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans