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

🖥️ Componente: CPU. Em Linux, o load average é o primeiro indicador a observar. Este artigo cobre todas as ferramentas de diagnóstico de CPU — do top ao perf — com interpretação detalhada de cada campo e comandos prontos a executar em Debian, Ubuntu, RHEL e Rocky Linux.

Quando suspeitar de problema de CPU?

  • Load average persistentemente acima do número de vCPUs da VM
  • Campo %wa (iowait) elevado no top — pode indicar bottleneck de disco, não de CPU
  • Campo %st (steal) acima de 5% — o host físico está a “roubar” ciclos de CPU à VM
  • Sistema lento mas memória e disco parecem normais
  • Apenas um core a 100% com os restantes livres — aplicação single-threaded

1. uptime e load average — Primeiro Diagnóstico

# Carga atual e load average 1/5/15 minutos
uptime

# Exemplo de output:
# 14:32:01 up 12 days,  3:21,  2 users,  load average: 3.82, 2.15, 1.43
#                                                         1min  5min  15min

# Número de CPUs disponíveis
nproc

# Load average detalhado do kernel
cat /proc/loadavg

Interpretar o load average: dividir o valor pelo número de CPUs (nproc). Um load de 4.0 com 4 CPUs = 100% de utilização. Um load de 4.0 com 2 CPUs = sistema a 200%, com fila de espera.

🔴 Alerta: Load average (1 min) superior a 2× o número de CPUs de forma persistente indica saturação severa. O sistema tem mais trabalho pendente do que capacidade para processar.

2. top — Monitor em Tempo Real

# Iniciar top
top

# Modo não-interativo (útil para scripts — 3 iterações, 2s de intervalo)
top -bn3 -d2 | head -40

Interpretação da linha de CPU no top

Campo Significado Limiar de alerta
us CPU em espaço de utilizador (aplicações) Comparar com sy
sy CPU em modo kernel (system calls, drivers) > 30% pode indicar driver problemático
ni Processos com prioridade alterada (nice) Informativo
id CPU inativa (idle) < 10% sustentado = saturação
wa Espera por I/O de disco (iowait) > 20% = bottleneck de disco
hi Interrupções de hardware > 5% pode indicar problema de NIC/disco
si Interrupções de software > 5% verificar drivers de rede
st CPU steal — roubada pelo hypervisor > 5% = host sobrecarregado

Teclas úteis dentro do top: P ordenar por CPU · M ordenar por memória · 1 ver todos os cores · k terminar processo · q sair

🔴 CPU steal (%st): Em VMs, um valor de steal acima de 5% indica que o hypervisor está a atribuir menos CPU do que a VM solicita — o host físico está sobrecarregado com outras VMs. Este problema não tem solução dentro da VM — é necessário escalar para a equipa de infraestrutura.
💡 htop: Se disponível (apt/yum install htop), o htop oferece a mesma informação com interface mais legível, barras coloridas por core, e navegação interativa. Usar top em sistemas onde htop não está instalado.

3. mpstat — Estatísticas por Core

# Requer pacote sysstat
# apt install sysstat  /  yum install sysstat

# Estatísticas de todos os cores, a cada 2 segundos, 5 amostras
mpstat -P ALL 2 5

# Apenas CPU total (mais legível)
mpstat 1 5

Verificar a distribuição de carga entre cores. Se apenas um core está a 100% com os restantes livres, a aplicação é single-threaded — adicionar mais vCPUs não resolve o problema nesse caso.

💡 Dica: Usar mpstat -P ALL para detetar desequilíbrio de carga entre cores — pode indicar problemas de NUMA, IRQ affinity ou aplicações que não paralelizam eficientemente.

4. vmstat — Visão Sistémica de CPU e I/O

# Atualização a cada 2 segundos, 10 amostras
vmstat 2 10

Colunas de CPU e processo mais relevantes:

  • r: processos em fila de execução (runqueue) — se persistentemente > nº CPUs, saturação confirmada
  • b: processos bloqueados à espera de I/O — se > 0 com wa elevado, problema é disco não CPU
  • us, sy, id, wa, st: mesmo significado que no top
⚠️ Armadilha comum: Se b for elevado e wa for alto, o sistema parece lento de CPU mas o bottleneck é de disco ou rede. Não adicionar vCPUs — investigar o I/O.

5. sar — Histórico de CPU

# CPU atual — 1 amostra por segundo, 10 amostras
sar -u 1 10

# Histórico de CPU de hoje (requer sysstat ativo)
sar -u -f /var/log/sa/sa$(date +%d)

# Histórico de CPU de ontem
sar -u -f /var/log/sa/sa$(date -d yesterday +%d)

# CPU por core, histórico
sar -P ALL 1 5

# Ver todos os ficheiros de histórico disponíveis
ls -lh /var/log/sa/
💡 Caso de uso: O sar é a única ferramenta que permite comparar o desempenho atual com dias anteriores sem monitorização dedicada. Se o utilizador diz “o sistema estava lento ontem de manhã”, o sar pode confirmar — ou desmentir.

6. pidstat — CPU por Processo com Histórico

# CPU de cada processo, amostras de 3 segundos
pidstat -u 3 5

# Monitorizar processo específico por PID
pidstat -p <PID> 1 10

# Threads de um processo
pidstat -t -p <PID> 1 5

# I/O e CPU de todos os processos
pidstat -u -d 2 3

7. perf — Profiling Avançado

requer linux-tools

# Instalar
apt install linux-tools-$(uname -r) linux-tools-common   # Debian/Ubuntu
yum install perf                                          # RHEL/Rocky

# Top de funções a consumir CPU (interativo)
perf top -g

# Gravar perfil durante 30 segundos
perf record -ag sleep 30
perf report

# Estatísticas de CPU para um comando específico
perf stat ls -la /
⚠️ Nota: perf pode necessitar de ajuste nos parâmetros do kernel: sysctl -w kernel.perf_event_paranoid=1. Em produção, usar com cautela — o overhead de perf record -ag pode ser significativo.

8. Checklist — Diagnóstico de CPU

  • uptime && nproc — load average vs número de CPUs
  • top — campo %st (steal) acima de 5%? Problema no host
  • top — campo %wa (iowait) acima de 20%? Bottleneck de disco, não de CPU
  • mpstat -P ALL 1 5 — distribuição equilibrada entre cores?
  • vmstat 1 5 — coluna r persistentemente acima do nº de CPUs?
  • pidstat -u 3 3 — qual processo consome mais CPU?
  • sar -u -f /var/log/sa/sa$(date +%d) — padrão histórico hoje?

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário