Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O que é tcp-backlog em redis.conf


O tcp-backlog é do tamanho da "fila de conexão completa" (handshake de três vias completo, o que é descrito aqui) ou "fila de conexão incompleta"?

tcp-backlog é o tamanho da fila de conexão completa . Na verdade, o Redis passa essa configuração como o segundo parâmetro do listen(int s, int backlog) ligar.

@GuangshengZuo já tinha uma boa resposta para essa pergunta. Então vou focar no outro.

Se significa "fila de conexão completa", por que devo aumentar tcp_max_syn_backlog que limita o tamanho de uma fila de conexão incompleta?

Citação do documento que você mencionou:

A implementação usa duas filas, uma fila SYN (ou fila de conexão incompleta) e uma fila de aceitação (ou fila de conexão completa). As conexões no estado SYN RECEIVED são adicionadas à fila SYN e depois movidas para a fila de aceitação quando seu estado muda para ESTABLISHED, ou seja, quando o pacote ACK no handshake de 3 vias é recebido. Como o nome indica, a chamada de aceitação é implementada simplesmente para consumir conexões da fila de aceitação. Nesse caso, o argumento backlog do syscall de escuta determina o tamanho da fila de aceitação.

Podemos ver que itens na complete connection queue são movidos da incomplete connection queue .

Se você tiver um grande somaxconn com um pequeno tcp_max_syn_backlog , então você pode NÃO ter itens suficientes para serem movidos para a complete connection queue , e a complete connection queue pode nunca estar cheio. Muitas solicitações já podem ter sido descartadas da primeira fila antes de terem a chance de serem movidas para a segunda.

Portanto, aumente apenas o valor de somaxconn pode NÃO funcionar. Você tem que levantar os dois.