vmstat, iostat e sar - Entendendo Ferramentas de Análise de Desempenho do Linux

vmstat, iostat e sar - Entendendo Ferramentas de Análise de Desempenho do Linux

O Que Você Vai Aprender

  • O que cada ferramenta faz e como ler sua saída
  • Como identificar gargalos de CPU, memória, I/O e rede
  • Quando usar vmstat vs iostat vs sar

Resumo Rápido: Papel de Cada Ferramenta

Ferramenta Melhor Para
vmstat Visão geral do sistema -- CPU, memória, swap, I/O de relance
iostat Detalhes de I/O por dispositivo -- await, IOPS, utilização
sar Dados históricos -- análise de tendências e revisão pós-incidente

Pré-requisitos

  • SO: Ubuntu ou Linux baseado em RHEL
  • iostat e sar requerem o pacote sysstat
  • Instale com: sudo apt install sysstat

O Que é o vmstat?

vmstat (Virtual Memory Statistics) exibe CPU, memória, swap, I/O e contagem de processos em uma única saída. É a primeira ferramenta a usar quando você precisa de uma visão rápida do sistema inteiro para identificar qual subsistema está sob pressão.

Uso Básico

vmstat [intervalo [contagem]]
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1543200  52480 921600    0    0    14    38  312  580 12  3 84  1  0
 0  0      0 1540800  52480 922100    0    0     0    12  280  510  5  1 93  1  0
 0  0      0 1539900  52480 922500    0    0     0    16  295  530  4  1 94  1  0

Lendo os Campos

procs

  • r: Processos aguardando execução. Se isso excede consistentemente a contagem de CPUs, você tem saturação de CPU.
  • b: Processos bloqueados em sono ininterruptível (tipicamente aguardando I/O).

memory (em KB)

  • swpd: Swap em uso. Qualquer valor diferente de zero merece atenção.
  • free: Memória não utilizada.
  • buff / cache: Buffer e cache de páginas -- memória que o SO mantém para reutilização, não desperdicada.

swap

  • si: Taxa de swap-in (disco -> memória). Consistentemente diferente de zero significa pressão de memória.
  • so: Taxa de swap-out (memória -> disco). Consistentemente diferente de zero significa pressão de memória.

io (blocos/seg)

  • bi: Blocos lidos de dispositivos de bloco.
  • bo: Blocos escritos em dispositivos de bloco.

cpu (%)

  • us: Uso de CPU em espaço de usuário.
  • sy: Uso de CPU em espaço do kernel.
  • id: Tempo ocioso.
  • wa: Tempo aguardando I/O. Valores sustentados acima de 10% indicam um gargalo de I/O.
  • st: Tempo roubado pelo hypervisor desta VM (apenas ambientes virtualizados).

A primeira linha é cumulativa

A primeira linha da saída do vmstat é a média desde o boot e é útil apenas como linha de base. Diagnostique a partir da segunda linha em diante. Padrões comuns: vmstat 1 para monitoramento continuo, vmstat 5 12 para um snapshot de um minuto em intervalos de cinco segundos.

O Que é o iostat?

iostat mostra estatísticas resumidas de CPU junto com métricas de I/O por dispositivo. Após o vmstat levantar suspeita de um gargalo de I/O, iostat -x identifica qual dispositivo é o culpado.

Instalação (apenas na primeira vez)

$ sudo apt install sysstat   # Ubuntu/Debian
$ sudo dnf install sysstat   # RHEL/Fedora

Uso Básico

$ iostat -x 1 5
Device            r/s     w/s   rkB/s   wkB/s  await  r_await  w_await  util%
sda              1.20    5.30   48.00  212.00   2.50     1.80     2.70   3.20
nvme0n1         25.00   80.00  800.00 3200.00   0.48     0.40     0.52   8.50

Campos Principais

Campo Descrição Limite de Alerta
await Tempo médio de resposta por requisição (ms) HDD: >20ms / SSD: >1ms
r_await Tempo de resposta de leitura (ms) --
w_await Tempo de resposta de escrita (ms) --
util% Porcentagem de ocupação do dispositivo Preocupante: >80%, Saturação: 100%
r/s, w/s Operações de leitura/escrita por segundo (IOPS) Compare com a especificação do dispositivo

Quando util% se aproxima de 100%, o dispositivo está saturado -- a fila de I/O está crescendo e os tempos de resposta inflam. Um pico em await junto com util% alto confirma que o dispositivo é o gargalo. Note que util% é uma métrica em nível de dispositivo, não de partição.

Filtrar Dispositivos Específicos

$ iostat -x -d sda nvme0n1 1

O Que é o sar?

sar (System Activity Reporter) coleta continuamente métricas de CPU, memória, I/O e rede e as armazena como dados históricos. Seu principal valor é responder perguntas como "o que aconteceu às 3 da manhã na noite passada?" que ferramentas em tempo real não conseguem.

Habilitando o sar

$ sudo apt install sysstat
$ sudo systemctl enable sysstat --now

Uma vez habilitado, o daemon sadc grava registros em /var/log/sa/saDD (onde DD é a data com dois dígitos). Os dados se acumulam diariamente.

Opções Comuns

$ sar -u 1 5          # Utilizacao de CPU
$ sar -r 1 5          # Uso de memoria
$ sar -b 1 5          # Estatisticas de I/O
$ sar -n DEV 1 5      # Estatisticas de rede por interface
$ sar -n EDEV 1 5     # Estatisticas de erros de rede
$ sar -q 1 5          # Media de carga e contagem de processos

Revisando Dados Históricos

# Estatisticas de CPU de hoje (todos os intervalos gravados)
$ sar -u

# Um dia inteiro de todas as metricas (flag -A)
$ sar -A -f /var/log/sa/sa01
00:00:01    all      2.34      0.00      5.67      0.12      0.00     91.87
01:00:01    all      1.23      0.00      3.45      0.08      0.00     95.24
02:00:01    all      0.98      0.00      2.11      0.05      0.00     96.86

Alterando o intervalo de coleta

O intervalo de coleta padrão é 10 minutos, configurado em /etc/cron.d/sysstat ou /etc/sysstat/sysstat. Para ambientes de produção onde você precisa de precisão pós-incidente, altere para 1-2 minutos. Tenha em mente que intervalos mais curtos aumentam o uso de disco proporcionalmente.

Qual Ferramenta Você Deve Usar?

Combinar a ferramenta certa com sua pergunta de investigação reduz significativamente o tempo de diagnóstico.

Pergunta Ferramenta Campos Principais
Qual é o estado geral do sistema? vmstat 1 r, wa, si/so
A CPU é o gargalo? vmstat / sar -u r, us+sy, id
Qual disco está lento? iostat -x 1 await, util%
O sistema está fazendo swap? vmstat si, so, swpd
O que aconteceu ontem à noite? sar -u / -r / -b Visão de série temporal
A rede está saturada? sar -n DEV rxkB/s, txkB/s

Padrões Práticos de Detecção de Gargalos

Quatro sequências de diagnóstico comuns usadas em ambientes de produção.

1. Suspeita de Gargalo de CPU

# Passo 1: Visao geral do sistema
$ vmstat 1 10
# Observe se r (fila de execucao) excede consistentemente a contagem de CPUs

# Passo 2: Confirmar com sar
$ sar -u 1 10
# us + sy sustentado acima de 90% -> CPU e o gargalo

2. Suspeita de Pressão de Memória ou Swap

# Passo 1: Verificar atividade de swap
$ vmstat 1 10
# si/so consistentemente diferente de zero -> swap ativo (pressao de memoria)

# Passo 2: Detalhe de memoria
$ sar -r 1 5
# Alto %memused + kbswpused crescente -> requer acao

3. Suspeita de Gargalo de I/O

# Passo 1: vmstat para confirmar wa
$ vmstat 1 5
# wa acima de 10% -> suspeita de gargalo de I/O

# Passo 2: iostat para identificar o dispositivo
$ iostat -x 1 10
# Foque em dispositivos com alto await ou util% acima de 80%
# Alerta HDD: await >20ms / Alerta SSD: await >1ms

4. Suspeita de Problema de Rede

$ sar -n DEV 1 5
# rxkB/s / txkB/s: verifique a utilizacao de largura de banda
# rxerr/s / txerr/s diferente de zero: possivel problema de hardware ou driver

Próximas Leituras