Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Was ist tcp-backlog in redis.conf

Hat tcp-backlog die Größe von "complete connection queue" (Dreiwege-Handshake komplett, was hier beschrieben wird) oder "incomplete connection queue"?

tcp-backlog ist die Größe der vollständigen Verbindungswarteschlange . Tatsächlich übergibt Redis diese Konfiguration als zweiten Parameter von listen(int s, int backlog) anrufen.

@GuangshengZuo hatte bereits eine gute Antwort auf diese Frage. Also konzentriere ich mich auf den anderen.

Wenn es "vollständige Verbindungswarteschlange" bedeutet, warum sollte ich dann tcp_max_syn_backlog erhöhen, was die Größe einer unvollständigen Verbindungswarteschlange begrenzt?

Zitat aus dem von Ihnen erwähnten Dokument:

Die Implementierung verwendet zwei Warteschlangen, eine SYN-Warteschlange (oder unvollständige Verbindungswarteschlange) und eine Annahmewarteschlange (oder vollständige Verbindungswarteschlange). Verbindungen im Zustand SYN RECEIVED werden der SYN-Warteschlange hinzugefügt und später in die Annahmewarteschlange verschoben, wenn sich ihr Zustand in ESTABLISHED ändert, d. h. wenn das ACK-Paket im 3-Wege-Handshake empfangen wird. Wie der Name schon sagt, wird der Accept-Aufruf dann einfach implementiert, um Verbindungen aus der Accept-Queue zu verbrauchen. In diesem Fall bestimmt das backlog-Argument des Listen-Systemaufrufs die Größe der Accept-Queue.

Wir können diese Elemente in complete connection queue sehen werden aus der incomplete connection queue verschoben .

Wenn Sie eine große somaxconn haben mit einem kleinen tcp_max_syn_backlog , dann haben Sie möglicherweise NICHT genügend Elemente, um sie in die complete connection queue zu verschieben , und die complete connection queue vielleicht nie voll. Viele Anfragen wurden möglicherweise bereits aus der ersten Warteschlange gelöscht, bevor sie in die zweite verschoben werden können.

Erhöhen Sie also nur den Wert von somaxconn könnte NICHT funktionieren. Du musst beide erhöhen.