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
vmstatvsiostatvssar
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
iostatesarrequerem o pacotesysstat- 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