TCP Tuning: Guia de Otimização para Servidores de Alto Tráfego

TCP Tuning. Otimizar a pilha TCP do Linux é essencial para servidores que lidam com milhares de conexões simultâneas, como instâncias de alta performance rodando Nginx, LiteSpeed ou clusters MariaDB. Quando o tráfego aumenta, os valores padrão do kernel muitas vezes se tornam gargalos, resultando em latência ou conexões recusadas.

Abaixo, apresento um guia de configurações para o seu /etc/sysctl.conf, focado em reduzir o overhead e maximizar o throughput.


1. Otimização da Tabela de Conexões e Reuso

Em servidores de alto tráfego, as conexões entram rapidamente no estado TIME_WAIT. Se não forem recicladas, elas podem esgotar as portas efêmeras.

  • net.ipv4.tcp_tw_reuse = 1: Permite reutilizar conexões em TIME_WAIT para novas conexões se for seguro do ponto de vista do protocolo.
  • net.ipv4.ip_local_port_range = 1024 65535: Amplia a faixa de portas disponíveis para conexões de saída.
  • net.ipv4.tcp_fin_timeout = 15: Reduz o tempo que uma conexão permanece no estado FIN-WAIT-2, liberando recursos mais rápido.

2. Ajuste de Buffers de Memória (Read/Write)

Para conexões de alta velocidade (BDP – Bandwidth Delay Product), os buffers de memória precisam ser grandes o suficiente para manter os dados “em voo”.

ParâmetroValor SugeridoDescrição
net.core.rmem_max16777216Buffer máximo de recebimento.
net.core.wmem_max16777216Buffer máximo de envio.
net.ipv4.tcp_rmem4096 87380 16777216Ajuste dinâmico (min, default, max) para leitura.
net.ipv4.tcp_wmem4096 65536 16777216Ajuste dinâmico (min, default, max) para escrita.

3. Controle de Congestionamento (BBR)

O algoritmo BBR (Bottleneck Bandwidth and RTT) do Google é superior ao antigo CUBIC em redes com perda de pacotes ou alta latência, pois foca na largura de banda real e não apenas na perda de pacotes.

Bash

# Habilitar BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

4. Gerenciamento de Filas e Backlog

Se o servidor recebe picos repentinos de tráfego (o famoso “efeito Slashdot”), as filas de entrada podem transbordar.

  • net.core.netdev_max_backlog = 5000: Aumenta o número de pacotes na fila de entrada da interface de rede.
  • net.ipv4.tcp_max_syn_backlog = 8192: Aumenta o limite de conexões “meio-abertas” (importante contra ataques SYN flood).
  • net.core.somaxconn = 4096: Define o limite máximo de conexões em espera que o kernel pode aceitar (o padrão costuma ser 128, o que é muito baixo para produção).

5. Proteção e Eficiência

  • net.ipv4.tcp_syncookies = 1: Protege contra ataques SYN Flood.
  • net.ipv4.tcp_slow_start_after_idle = 0: Impede que o TCP reduza a janela de congestionamento após um período de inatividade, mantendo a performance em conexões persistentes (Keep-Alive).
  • net.ipv4.tcp_fastopen = 3: Permite o envio de dados no pacote inicial SYN, acelerando o handshake (requer suporte da aplicação).

Como aplicar as alterações:

  1. Edite o arquivo: nano /etc/sysctl.conf
  2. Adicione as linhas desejadas.
  3. Aplique as mudanças sem reiniciar:Bashsysctl -p

Dica de monitoramento: Use o comando ss -s para verificar o estado atual das suas conexões e ver se o número de TIME_WAIT está sob controle.

Comparativo de Performance: Kernel Padrão vs. TCP Tuned

Esta tabela ilustra o comportamento de um servidor Linux (como AlmaLinux ou Ubuntu) sob carga intensa antes e depois das otimizações de rede.

Recurso / MétricaConfiguração Padrão (Kernel Stock)Configuração Otimizada (TCP Tuning)Impacto no Usuário
Algoritmo de CongestionamentoCUBIC (Reativo a perdas)BBR (Proativo / Google)Carregamento de páginas mais rápido.
Limite de Conexões (somaxconn)128 (Muito baixo)4096 ou superiorFim do erro “Connection Refused”.
Tempo de TIME_WAIT60 segundos15 a 30 segundosLiberação rápida de memória/portas.
Buffers de Rede (TCP)Escalonamento conservadorMaximizados (16MB+)Maior velocidade em downloads e streams.
Handshake TCP (Fast Open)Desativado (3-way handshake)Habilitado (TFO)Latência reduzida na primeira conexão.

Perguntas Frequentes sobre TCP Tuning

O que é TCP Tuning e por que meu servidor precisa disso?

O TCP Tuning é o processo de ajustar os parâmetros da pilha de rede do kernel Linux para otimizar o fluxo de dados. Servidores com configurações padrão são limitados para evitar o consumo excessivo de recursos, mas em ambientes de alto tráfego, esses limites causam latência e recusa de conexões. O ajuste garante que o hardware seja aproveitado ao máximo.

O algoritmo BBR realmente melhora a velocidade?

Sim. Ao contrário dos algoritmos tradicionais como o CUBIC, que esperam a perda de pacotes para reduzir a velocidade, o BBR (Bottleneck Bandwidth and RTT) do Google analisa a largura de banda real disponível. Isso resulta em um throughput significativamente maior e menor latência, especialmente em conexões de longa distância ou redes instáveis.

Alterar o sysctl.conf pode derrubar meu servidor?

Se os valores forem aumentados de forma desproporcional à memória RAM disponível, o servidor pode sofrer de kernel panic ou falta de memória. É recomendável aplicar as configurações em ambiente de teste ou aumentar os limites gradualmente, monitorando o uso de memória com ferramentas como htop ou netdata.

Como verificar se as alterações de TCP foram aplicadas?

Você pode validar as alterações em tempo real usando o comando: sysctl net.ipv4.tcp_congestion_control. Para verificar o status das conexões e buffers, utilize ss -nli ou netstat -st

Essas otimizações funcionam em servidores Cloud e VPS?

Sim, funcionam na maioria das instâncias KVM e servidores dedicados. No entanto, em virtualização do tipo OpenVZ/LXC, o administrador do nó principal é quem controla esses parâmetros, e você pode não ter permissão para alterar o /proc/sys/net