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

🔬 Ferramentas Avançadas. Este artigo reúne as ferramentas de diagnóstico mais avançadas para Linux — dstat para monitorização all-in-one, ferramentas eBPF para observabilidade com baixo overhead (sobrecarga), um script de diagnóstico automático pronto a usar, e tabelas completas de referência rápida para uso no campo.

1. dstat — Monitor All-in-One

# Instalar: apt install dstat  /  yum install dstat

# CPU, disco, rede e memória em simultâneo (a cada 2 segundos)
dstat -cdnmg 2

# Com nome do processo de maior I/O e maior consumo de rede
dstat -cdnmg --top-io --top-net 2

# Guardar para CSV (análise posterior)
dstat --output /tmp/dstat_$(hostname)_$(date +%Y%m%d_%H%M).csv -cdnmg 2 300
# 300 amostras = 10 minutos de dados

O dstat é especialmente útil quando não se sabe em que componente focar — mostra CPU, disco, rede e memória na mesma linha, facilitando a identificação de correlações (ex: pico de CPU sempre que há pico de I/O de rede).

💡 Dica: O dstat --output ficheiro.csv permite capturar dados durante um período de degradação e analisar depois em Excel ou Google Sheets — muito útil para apresentar evidências a equipas de infraestrutura ou hypervisor.

2. eBPF — Observabilidade Avançada com Baixo Overhead (sobrecarga)

# Instalar (Ubuntu/Debian — kernel >= 4.1)
apt install bpfcc-tools linux-headers-$(uname -r)

# RHEL/Rocky
yum install bcc-tools kernel-devel

Ferramentas eBPF mais úteis para diagnóstico

# Latência de I/O de disco por processo (histograma)
biolatency-bpfcc

# Top de syscalls por processo
syscount-bpfcc -p <PID>

# Novas conexões TCP em tempo real (quem está a ligar a quê)
tcpconnect-bpfcc

# Cache hit rate do page cache do filesystem
cachestat-bpfcc 1

# Latência de chamadas de sistema em histograma
funclatency-bpfcc '__x64_sys_read'

# I/O de disco com nome do processo
biosnoop-bpfcc | head -30
⚠️ Requisitos eBPF: Requer kernel Linux >= 4.1 e permissões de root. Em VMs com kernel muito antigo, verificar com uname -r. As ferramentas bpfcc têm overhead muito baixo comparado com strace e são seguras para usar em produção.
💡 biolatency-bpfcc: Gera um histograma de latência de I/O de disco em tempo real. Permite distinguir entre latência consistente (problema de hardware/storage) e latência com outliers ocasionais (problema de congestion ou caching).

3. Script de Diagnóstico Automático

Guardar como diagnostico_linux.sh, tornar executável com chmod +x diagnostico_linux.sh e executar com sudo ./diagnostico_linux.sh:

#!/bin/bash
# === SCRIPT DE DIAGNÓSTICO RÁPIDO — kbase.pt ===
# Executar com: sudo bash diagnostico_linux.sh

REPORT="/tmp/diagnostico_$(hostname)_$(date +%Y%m%d_%H%M).txt"
SEP="=========================================="

echo "$SEP"         > $REPORT
echo "DIAGNÓSTICO LINUX — $(hostname)" >> $REPORT
echo "$(date)"      >> $REPORT
echo "$SEP"         >> $REPORT

echo -e "\n--- SISTEMA ---" >> $REPORT
uname -a            >> $REPORT
cat /etc/os-release | grep PRETTY_NAME >> $REPORT

echo -e "\n--- UPTIME E LOAD AVERAGE ---" >> $REPORT
uptime              >> $REPORT
echo "CPUs: $(nproc)" >> $REPORT

echo -e "\n--- CPU (3 amostras) ---" >> $REPORT
mpstat 1 3          >> $REPORT 2>/dev/null || \
    top -bn3 | grep '%Cpu' >> $REPORT

echo -e "\n--- MEMÓRIA ---" >> $REPORT
free -h             >> $REPORT
echo "" >> $REPORT
grep -E 'MemAvailable|SwapFree|Dirty' /proc/meminfo >> $REPORT

echo -e "\n--- TOP PROCESSOS CPU ---" >> $REPORT
ps aux --sort=-%cpu | head -10 >> $REPORT

echo -e "\n--- TOP PROCESSOS MEMÓRIA ---" >> $REPORT
ps aux --sort=-%mem | head -10 >> $REPORT

echo -e "\n--- DISCO (espaço) ---" >> $REPORT
df -h               >> $REPORT
echo "" >> $REPORT
df -i               >> $REPORT

echo -e "\n--- DISCO (I/O, 3 amostras) ---" >> $REPORT
iostat -xz 1 3      >> $REPORT 2>/dev/null

echo -e "\n--- REDE (interfaces) ---" >> $REPORT
ip -s link show     >> $REPORT

echo -e "\n--- REDE (conexões TCP) ---" >> $REPORT
ss -s               >> $REPORT

echo -e "\n--- ERROS KERNEL (últimas 30 linhas) ---" >> $REPORT
dmesg -T --level=err,warn 2>/dev/null | tail -30 >> $REPORT

echo -e "\n--- SERVIÇOS COM FALHA ---" >> $REPORT
systemctl --failed  >> $REPORT 2>/dev/null

echo -e "\n--- ERROS SISTEMA (última hora) ---" >> $REPORT
journalctl -p err --since '1 hour ago' --no-pager 2>/dev/null | tail -20 >> $REPORT

echo ""
echo "✅ Relatório guardado em: $REPORT"
ls -lh $REPORT

4. Tabela Completa de Ferramentas Linux

Ferramenta Instalação Uso principal
top / htop htop: apt/yum install htop Monitor interativo de CPU, memória e processos
vmstat pré-instalado CPU, memória, swap e I/O — visão sistémica
mpstat sysstat Estatísticas de CPU por core
iostat sysstat I/O de disco por dispositivo — await, %util, aqu-sz
sar sysstat Histórico de CPU, memória, disco e rede
pidstat sysstat CPU e I/O por processo com histórico
iotop apt/yum install iotop I/O em tempo real por processo
iftop apt/yum install iftop Tráfego de rede por endereço IP
nethogs apt/yum install nethogs Tráfego de rede por processo
atop apt/yum install atop Monitor completo com histórico persistente
dstat apt/yum install dstat Monitor all-in-one combinado (CPU+disco+rede+RAM)
perf linux-tools-$(uname -r) Profiling de CPU e funções de kernel
strace pré-instalado Rastreio de syscalls de um processo
lsof pré-instalado Ficheiros e conexões abertas por processo
fio apt/yum install fio Benchmark de performance de disco
mtr apt/yum install mtr Diagnóstico de rede ping+traceroute em tempo real
tcpdump pré-instalado Captura de pacotes de rede
smartctl smartmontools Saúde de disco SMART
bpfcc-tools apt install bpfcc-tools Observabilidade avançada com eBPF (kernel >= 4.1)

5. Limiares de Referência Rápida

Métrica ✅ Normal ⚠️ Atenção 🔴 Crítico
Load Average (1 min) < nº CPUs = nº CPUs > 2× nº CPUs
CPU iowait (%wa) < 5% 5 – 20% > 20% sustentado
CPU steal (%st) < 1% 1 – 5% > 5%
RAM available (VM 4GB) > 500 MB 200 – 500 MB < 200 MB
Swap out (vmstat so) 0 ocasional contínuo > 0
Disco await (ms) < 10 ms 10 – 25 ms > 25 ms
Disco aqu-sz < 1 1 – 3 > 3
Disco %util < 70% 70 – 90% > 90%
Espaço livre disco > 20% 10 – 20% < 10%
Inodes livres > 20% 5 – 20% < 5%
TCP retransmissões/s 0 < 5 > 5

6. Comandos por Sintoma — Referência Rápida

Sintoma Primeiro Comando
Sistema lento — geral uptime && top -bn1 | head -20
CPU a 100% mpstat -P ALL 1 3 && ps aux --sort=-%cpu | head -10
iowait elevado iostat -xz 2 5 && iotop -o -bn 3
RAM esgotada free -h && vmstat 1 5 | awk '{print $7,$8}'
Swap em uso ativo vmstat 1 10 (colunas si/so) && sar -W 1 5
Disco lento iostat -xz 2 10 — focar em await e aqu-sz
Disco cheio df -h && df -i && du -sh /var/* | sort -rh
Ficheiro apagado ocupa espaço lsof | grep deleted | sort -k7 -rn | head -10
Rede lenta mtr -n 8.8.8.8 && netstat -st | grep retransmit
Conectividade intermitente ping -c 100 <gateway> && ip -s link show
DNS lento time dig <domínio> && cat /etc/resolv.conf
Serviço parado systemctl --failed && journalctl -u <serviço> -n 50
OOM Killer ativo dmesg -T | grep -i 'oom\|killed process'
Processo bloqueado (estado D) ps aux | awk '$8~/^D/' && iostat -xz 2 3

7. Checklist Final — 8 Fases

  1. Recolha inicial: uptime && nproc && free -h && df -h — baseline em 30 segundos
  2. CPU: load average, mpstat por core, CPU steal (%st), iowait (%wa)
  3. Memória: campo available no free, swap in/out no vmstat, OOM no dmesg
  4. Disco: iostat -xz — await e aqu-sz; iotop — processo responsável
  5. Rede: erros em ip -s link; mtr para latência; retransmissões TCP
  6. Processos: processos em estado D; systemctl --failed; strace -c se suspeito
  7. Kernel/Logs: dmesg --level=err,warn; journalctl -p err; atop histórico
  8. Documentação: executar diagnostico_linux.sh e guardar relatório com timestamp

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário