Marcio Cunha

Como depurar gargalos de rede no Docker com o iperf3

Aprenda a metodologia exata para medir largura de banda e identificar perdas de pacotes entre redes bridge e overlay no Docker usando o iperf3.

Marcio Cunha•6 min
Também disponível em:EnglishEspañol
Resumo
  • Redes bridge isolam containers no mesmo host, enquanto redes overlay conectam múltiplos hosts em arquiteturas de enxames de servidores.
  • O iperf3 simula tráfego intenso de rede entre dois pontos para revelar o limite real de transferência e instabilidades ocultas.
  • Testar tráfego TCP revela gargalos de banda bruta, ao passo que simular tráfego UDP expõe perdas de pacotes e atrasos no envio.
  • Problemas de performance de rede entre containers costumam surgir devido ao encapsulamento de pacotes e uso excessivo de recursos do host.
  • Auditar pacotes com ferramentas complementares ajuda a isolar se a lentidão ocorre na camada virtual ou na placa física do servidor.

Por que a rede do Docker pode ficar lenta sem avisar

Quando colocamos aplicações para rodar dentro de containers, assumimos que a comunicação entre eles flui perfeitamente. No entanto, camadas extras de virtualização e encapsulamento podem transformar uma simples chamada de API em um teste de paciência. Se você já percebeu que um microserviço engasga ao falar com outro, o culpado pode ser o modo como o Docker gerencia o tráfego nos bastidores. Para entender o que está acontecendo, precisamos ir além das métricas superficiais de CPU e olhar diretamente para o comportamento dos pacotes de dados trafegando pelas placas virtuais.

Na prática, o Docker cria pontes virtuais conhecidas como bridges para conectar containers no mesmo servidor físico, ou redes do tipo overlay quando precisamos juntar máquinas diferentes em um cluster. Cada uma dessas abordagens possui um custo operacional distinto. Enquanto a bridge conversa diretamente com a camada de rede do sistema operacional hospedeiro, a overlay precisa empacotar os dados em pacotes adicionais para enviá-los de um servidor para outro através da internet ou rede interna. É exatamente nessa viagem que os gargalos costumam se esconder, causando lentidão que muitas vezes confundimos com problemas de código ou falta de memória RAM.

Para investigar falhas de comunicação de forma cirúrgica, precisamos de uma ferramenta que coloque a prova a infraestrutura sem depender da nossa aplicação principal. Assim como aprendemos a auditar chamadas de sistema quando um container trava e precisamos auditar syscalls com o Strace, na rede precisamos de um gerador de tráfego confiável. É aqui que entra o iperf3, o utilitário padrão da indústria para medir largura de banda e estabilidade de conexões de maneira completamente isolada de ruídos externos.

Como preparar o ambiente de testes com o iperf3 nos containers

O iperf3 funciona em um modelo clássico de cliente e servidor. Para medir o desempenho da rede no Docker, precisamos colocar o servidor iperf3 rodando dentro de um container e, em seguida, disparar comandos a partir de outro container cliente. Isso simula exatamente o cenário real onde duas aplicações conversam dentro da mesma infraestrutura virtualizada. Se você quiser entender mais sobre a saúde geral das suas conexões sem fio ou cabos, vale a pena conferir também dicas complementares sobre como medir perda de pacotes e jitter no Wi-Fi com o iperf3 para comparar o comportamento local com o ambiente corporativo.

Para iniciar o servidor do iperf3 em segundo plano no seu Docker, abra o terminal e execute a instrução abaixo. Ela vai baixar a imagem oficial e manter a escuta na porta padrão:

docker run -d --name iperf3-server networkstatic/iperf3 -s

Com o servidor ativo e aguardando conexões, o próximo passo lógico é disparar o teste a partir do cliente. Podemos fazer isso criando um container efêmero que se conecta diretamente ao IP do container servidor ou à rede bridge padrão. Veja como rodar a medição de largura de banda bruta:

docker run --rm networkstatic/iperf3 -c <IP_DO_CONTAINER_SERVIDOR>

Esse comando básico transfere dados por dez segundos utilizando o protocolo TCP, que garante a entrega de todos os pacotes. O resultado exibido no terminal mostrará a taxa de transferência em megabits por segundo, revelando se a sua ponte virtual está entregando a velocidade esperada ou se existe algum estrangulamento invisível drenando a performance da sua aplicação.

Identificando perdas de pacotes e instabilidade com tráfego UDP

O protocolo TCP é educado: se um pacote se perde no meio do caminho, ele exige o reenvio imediato. Embora isso garanta que nenhum dado corrompa, mascara o fato de que a sua rede pode estar instável e sofrendo com microperdas constantes. Para medir a verdadeira saúde de redes overlay ou conexões complexas no Docker, precisamos testar o protocolo UDP, que dispara pacotes sem olhar para trás e nos mostra exatamente o que se perdeu no trajeto.

Para rodar um teste UDP focando na largura de banda e na taxa de perda de pacotes, ajustamos os parâmetros do comando no cliente. O parâmetro -u ativa o modo UDP, enquanto -b define a banda que desejamos injetar na rede virtualizada:

docker run --rm networkstatic/iperf3 -c <IP_DO_CONTAINER_SERVIDOR> -u -b 100M

Na prática, se o resultado do teste indicar uma taxa de perda de pacotes superior a um ou dois porcento, temos um sinal claro de alerta. Em redes overlay que utilizam tunelamento VXLAN, por exemplo, pacotes grandes podem exceder a unidade máxima de transmissão permitida, gerando fragmentação e descartes silenciosos pelo kernel do Linux. Se você precisar investigar mais a fundo o que está trafegando de forma suspeita na placa de rede, combinar essa análise com o uso do tcpdump no Linux para capturar pacotes de rede trará a visibilidade milimétrica necessária para fechar o diagnóstico.

Interpretando os resultados e aplicando correções na infraestrutura

Depois de coletar os números do iperf3, o verdadeiro trabalho de engenharia começa: traduzir aquelas linhas de texto em decisões práticas de arquitetura. Se o teste entre dois containers na mesma bridge mostra velocidade máxima e zero perda, mas o teste através de uma rede overlay em múltiplos servidores apresenta queda drástica de banda, sabemos que o gargalo não está no processador do container, mas sim no encapsulamento de rede ou na capacidade da interface física de entubar os túneis virtuais.

Uma das soluções mais comuns para mitigar gargalos em redes overlay do Docker é ajustar o tamanho máximo do pacote na interface de rede virtual, conhecido como MTU. Muitas redes físicas operam com pacotes de 1500 bytes, mas o tunelamento do Docker consome alguns bytes extras para carregar seus próprios cabeçalhos de controle. Se o pacote final ultrapassar o limite da placa de rede física, o sistema precisará fatiá-lo, derrubando a performance. Reduzir o MTU da rede overlay para 1450 bytes costuma eliminar a fragmentação indesejada e recuperar instantaneamente a largura de banda perdida.

Considerações finais sobre diagnósticos de rede em ambientes conteinerizados

Isolar e diagnosticar gargalos de rede em ambientes baseados em Docker exige uma mudança de mentalidade, saindo de suposições para a mensuração empírica e controlada. O iperf3 se consolida como uma ferramenta indispensável nesse processo por remover a complexidade da aplicação e expor a verdadeira capacidade de transferência entre bridges e overlays. Manter essa rotina de testes integrada ao seu ciclo de monitoramento garante que surpresas de performance sejam evitadas antes que cheguem aos usuários finais.

Compreender o comportamento do tráfego virtualizado é o que separa uma infraestrutura frágil de um ambiente resiliente e preparado para escalar. Ao combinar medições precisas de largura de banda com uma análise criteriosa de perdas e ajustes finos de parâmetros de rede, você constrói sistemas robustos capazes de suportar cargas intensas sem sacrificar a estabilidade operacional.