tcp-backlogは、「完全な接続キュー」(3ウェイハンドシェイクが完了、ここで説明する内容)または「不完全な接続キュー」のサイズですか?
tcp-backlog
完全な接続キューのサイズです 。実際、Redisはこの構成をlisten(int s, int backlog)
の2番目のパラメーターとして渡します。 電話してください。
@GuangshengZuoは、この質問に対してすでに良い答えを持っていました。それで、もう一方に焦点を合わせます。
「完全な接続キュー」を意味する場合、不完全な接続キューのサイズを制限するtcp_max_syn_backlogを上げる必要があるのはなぜですか?
あなたが言及したドキュメントからの引用:
実装では、SYNキュー(または不完全な接続キュー)と受け入れキュー(または完全な接続キュー)の2つのキューを使用します。状態SYNRECEIVEDの接続はSYNキューに追加され、後で状態がESTABLISHEDに変わるとき、つまり3ウェイハンドシェイクのACKパケットが受信されると、受け入れキューに移動されます。名前が示すように、accept呼び出しは、単にacceptキューからの接続を消費するために実装されます。この場合、listensyscallのbacklog引数がacceptキューのサイズを決定します。
complete connection queue
内のアイテムが表示されます incomplete connection queue
から移動されます 。
大きなsomaxconn
がある場合 小さなtcp_max_syn_backlog
、その場合、complete connection queue
に移動するのに十分なアイテムがない可能性があります 、およびcomplete connection queue
いっぱいになることはありません。多くのリクエストは、2番目のキューに移動する前に、最初のキューからすでに削除されている可能性があります。
したがって、somaxconn
の値のみを上げます。 動作しない可能性があります。両方を上げる必要があります。