← Guia Completo: Diagnóstico de Desempenho em VMs Linux

🌐 Componente: Rede. Problemas de rede em VMs Linux podem ter origem em configuração de interfaces, drivers de NIC virtual, parâmetros do kernel TCP/IP, firewalls ou infraestrutura subjacente. O diagnóstico deve partir da camada mais baixa (adaptador, erros) para a mais alta (DNS, portas de aplicação).

Quando suspeitar de problema de rede?

  • Acesso a serviços externos ou internos lento mas a VM parece saudável
  • Timeouts frequentes em aplicações cliente-servidor
  • Resolução de nomes (DNS) lenta
  • Cópias de ficheiros para partilhas de rede muito abaixo do esperado
  • ip -s link mostra erros crescentes em RX ou TX

1. Estado e Erros das Interfaces

# Estado de todas as interfaces
ip addr show
ip link show

# Estatísticas de erros por interface — o mais importante!
ip -s link show

# Forma clássica (requer net-tools)
ifconfig -a
netstat -i
🔴 Verificar no output de ip -s link: Os campos errors e dropped em RX e TX devem ser 0 ou muito próximos. Valores crescentes indicam problemas de driver, configuração do NIC virtual ou sobrecarga do switch virtual.
# Verificar erros de driver/firmware da NIC
ethtool -S eth0 | grep -i error

# Estado de offloading (deve estar ativo para melhor performance)
ethtool -k eth0 | grep -E 'offload|scatter'

# Velocidade e duplex da interface
ethtool eth0 | grep -E 'Speed|Duplex|Link'

2. ss — Conexões e Estatísticas TCP

# Conexões TCP estabelecidas com processo
ss -tnp

# Portas em escuta com processo responsável
ss -tlnp

# Sumário de estatísticas TCP/UDP
ss -s

# Conexões por estado (TIME_WAIT, ESTABLISHED, etc.)
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
# Retransmissões e erros TCP (via netstat)
netstat -st | grep -E 'retransmit|fail|error|reset'
⚠️ Muitas conexões em TIME_WAIT: Um número muito elevado de conexões em TIME_WAIT pode indicar esgotamento de portas efémeras. Verificar com ss -s e se necessário ajustar: sysctl -w net.ipv4.tcp_tw_reuse=1.

3. ping, traceroute e mtr — Latência e Rota

# Ping com 20 pacotes
ping -c 20 8.8.8.8

# Traceroute sem resolução de DNS (mais rápido)
traceroute -n 8.8.8.8

# mtr — combinação em tempo real de ping + traceroute (a melhor ferramenta)
# apt install mtr  /  yum install mtr
mtr -n 8.8.8.8

# mtr em modo não-interativo (100 pacotes, output para terminal)
mtr -n --report --report-cycles 50 8.8.8.8
💡 mtr é a melhor ferramenta para diagnóstico de latência de rede — mostra perda de pacotes e RTT em tempo real para cada hop da rota. Identificar em que hop a latência aumenta dramaticamente ou onde há perda de pacotes.

Interpretar o output do mtr --report:

  • Loss%: perda de pacotes por hop — deve ser 0% no destino
  • Avg: latência média em ms
  • StDev: variância — valores altos indicam instabilidade (jitter)

4. Diagnóstico DNS

# Resolver nome com informação detalhada
dig google.com

# Forçar servidor DNS específico para teste
dig @8.8.8.8 google.com

# Medir tempo de resolução DNS
time dig google.com | grep 'Query time'

# Verificação rápida
nslookup google.com

# Configuração DNS atual
cat /etc/resolv.conf
cat /etc/nsswitch.conf | grep hosts
⚠️ DNS lento: Uma resolução DNS que demora mais de 100 ms é percetível. Testar o DNS interno com dig @<servidor-dns-interno> <dominio-interno> e comparar com um DNS público. Se o DNS interno for significativamente mais lento, o problema pode estar no servidor DNS ou na rede até ele.

5. iftop e nethogs — Tráfego por Host e Processo

# Tráfego por endereço IP remoto (requer root)
# apt install iftop  /  yum install iftop
iftop -i eth0

# Tráfego por processo (requer root)
# apt install nethogs  /  yum install nethogs
nethogs eth0

# Monitor simples sem ferramentas adicionais
watch -n 1 'cat /proc/net/dev | column -t'

6. tcpdump — Captura de Pacotes

# Captura de tráfego numa interface (Ctrl+C para parar)
tcpdump -i eth0 -n -v

# Filtrar por host específico
tcpdump -i eth0 -n host 192.168.1.100

# Filtrar por porta
tcpdump -i eth0 -n port 443

# Guardar captura para análise com Wireshark
tcpdump -i eth0 -w /tmp/captura.pcap

# Captura limitada a 100 MB por ficheiro
tcpdump -i eth0 -w /tmp/captura.pcap -C 100
💡 Wireshark: Transferir o ficheiro .pcap para a workstation e analisar com o Wireshark — filtros úteis: tcp.analysis.retransmission para retransmissões, dns para queries DNS, tcp.time_delta > 0.5 para operações lentas.

7. Teste de Velocidade com iperf3

# Instalar: apt install iperf3  /  yum install iperf3

# No servidor de destino (executar primeiro):
iperf3 -s

# No cliente (executar teste de 30 segundos):
iperf3 -c <ip_servidor> -t 30

# Teste bidirecional
iperf3 -c <ip_servidor> -t 30 --bidir

# Teste de UDP (útil para VoIP/streaming)
iperf3 -c <ip_servidor> -u -b 100M -t 30

8. Parâmetros sysctl de Rede

# Ver configuração TCP atual
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.core.rmem_max
sysctl net.core.wmem_max

# Todas as configurações de rede
sysctl -a | grep net.ipv4.tcp | sort

# Verificar se TCP BBR está ativo (melhor algoritmo de congestion control)
sysctl net.ipv4.tcp_congestion_control

9. Checklist — Diagnóstico de Rede

  • ip -s link show — erros em RX/TX acima de zero e a crescer?
  • ethtool -S eth0 | grep error — erros no driver da NIC?
  • ping -c 20 <gateway> — latência e perda de pacotes?
  • mtr -n <destino> — em que hop a latência aumenta?
  • time dig <dominio-interno> — DNS lento?
  • netstat -st | grep retransmit — retransmissões TCP?
  • ss -s — muitas conexões em TIME_WAIT ou CLOSE_WAIT?
  • iperf3 para servidor de referência — throughput dentro do esperado?

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário