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 emTIME_WAITpara 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 estadoFIN-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âmetro | Valor Sugerido | Descrição |
net.core.rmem_max | 16777216 | Buffer máximo de recebimento. |
net.core.wmem_max | 16777216 | Buffer máximo de envio. |
net.ipv4.tcp_rmem | 4096 87380 16777216 | Ajuste dinâmico (min, default, max) para leitura. |
net.ipv4.tcp_wmem | 4096 65536 16777216 | Ajuste 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:
- Edite o arquivo:
nano /etc/sysctl.conf - Adicione as linhas desejadas.
- Aplique as mudanças sem reiniciar:Bash
sysctl -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étrica | Configuração Padrão (Kernel Stock) | Configuração Otimizada (TCP Tuning) | Impacto no Usuário |
| Algoritmo de Congestionamento | CUBIC (Reativo a perdas) | BBR (Proativo / Google) | Carregamento de páginas mais rápido. |
| Limite de Conexões (somaxconn) | 128 (Muito baixo) | 4096 ou superior | Fim do erro “Connection Refused”. |
| Tempo de TIME_WAIT | 60 segundos | 15 a 30 segundos | Liberação rápida de memória/portas. |
| Buffers de Rede (TCP) | Escalonamento conservador | Maximizados (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 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.
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.
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.
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
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

