私の仮説があります。TCP接続が、サーバーが到達できるよりも速く到達することがありaccept()
ます。キューがオーバーフローし、問題が発生するまでキューに入れられます。
これが起こっていることをどのように確認できますか?
受け入れキューの長さまたはオーバーフローの数を監視できますか?どこかに露出しているカウンターはありますか?
netstat
限り、送信キューと受信キューの長さのみを表示していますが、これは受け入れキューとは異なります。
man netstat | less +/Flags
netstat
ません-実際にはFlags
、TCP接続ではまったく表示されないようです。接続は以下のように示されているように少しテストから、それが見えるESTABLISHED
中netstat
、私が行うプロセスへの接続を開いてみてください場合でも、listen()
決してaccept()
。
SYN_RECV
です。それ以外のキューはありません。ハーフオープン接続が多すぎるため、ドロップされたパケットをログに記録するようにカーネルに何らかの方法で指示できると思いますが、Linuxとのネットワーキングを調べてから10年以上経過しているため、その方法がわかりません。余談ですがaccept()
、あなたはその仕事をするのを待っているのではなくACK
、接続しているホストからが到着して接続を完了するのを待っています。
netstat
ます。