2011-01-27 17 views
10

一般的なCネットワークサーバーの実装では、受け入れ待ちキューのサイズはlistenで設定できます。新しい接続が得られ、キューにスペースがなくなると、ECONNREFUSEDはクライアントに送信されるか、要求は無視されます。GNU/Linuxのaccept pending connectionsキューのサイズを知る

このキューの状態を知る方法はありますか?負荷の高いイベントベースのデーモンでは、クライアントからの再試行がいくつか検出されているため、このキューがいっぱいになって接続試行が無視されている可能性があるため、重要です。

ありがとうございます。 Linuxでの

+0

は、クライアントはECONNREFUSEDエラーが発生するのか?もしそうなら、答えがあります。保留中のキューのサイズを知る方法はありません。 – Simone

+0

正確ではありません。ハンドシェイクが正しく終了せず、サーバはハンドシェイクの最後のACKが失われたようにSYNACKを送信する再試行に入ります。受け入れ保留キューがリッスンで設定された制限から外れたときにこの動作が再現されているため、このキューは疑わしいものです。 –

+0

すべての着信接続を受け入れるのですか? – Simone

答えて

8

: は、/ proc/sys/net/IPv4の/ tcp_max_syn_backlogの:

クライアントの接続からの確認応答を受信しませんでしたまだ覚え接続要求の最大数。

メモリが128Mbを超えるシステムの場合、デフォルト値は1024であり、メモリが少ないマシンの場合は128です。サーバーが過負荷の場合は、この数を増やしてください。

/proc/sys/net/core/somaxconn: SOMAXCONNというユーザースペースで知られているsocket listen()バックログの制限。 デフォルトは128です。TCPソケットの追加調整については、tcp_max_syn_backlogも参照してください。

これらは関連のsysctlあるが..私は座っていOpenBSDの上で今速いのsysctl -aは明らかに:net.inet.ip.maxqueue = 300