Como diagnosticar I/O de disco no Linux - Guia iostat e vmstat

Como diagnosticar I/O de disco no Linux - Guia iostat e vmstat

O que você vai aprender

  • Como determinar se I/O de disco é o gargalo quando o servidor está lento
  • Como usar iostat / vmstat para distinguir espera de CPU vs congestionamento de disco
  • Como sair do estado de "não sei o que está acontecendo"

Resumo rápido

Quando suspeitar de problemas de I/O de disco:

  1. CPU ociosa mas lento? -> iostat -xz 1
  2. I/O wait alto? -> Verifique %iowait
  3. Congestionamento de escrita? -> Verifique await / %util
  4. Confirmar que disco é a causa? -> vmstat 1

Pré-requisitos

  • SO: Ubuntu
  • Público: Iniciantes em servidores
  • Objetivo: Isolamento e diagnóstico

1. O que é "I/O de disco lento"?

Conclusão: I/O de disco lento significa que %iowait sobe mesmo quando a utilização de CPU parece baixa.

"Disco lento" geralmente significa uma destas situações:

  • Aplicação esperando resposta do disco
  • Escritas de log ficando acumuladas
  • DB / Docker / backups consumindo I/O
  • CPU está ociosa mas presa esperando I/O

Olhar apenas CPU% vai sempre levar à conclusão errada.

2. Instalando iostat

Conclusão: Instale sysstat via apt para obter iostat -- ele não vem por padrão no Ubuntu.

$ sudo apt update
$ sudo apt install -y sysstat

3. Usando iostat -xz

Conclusão: Execute iostat -xz 1 para estatísticas por segundo -- -x revela as métricas chave de I/O.

$ iostat -xz 1

Opções:

  • -x: Estatísticas estendidas (essencial)
  • -z: Ocultar linhas zeradas (saída mais limpa)
  • 1: Atualizar a cada 1 segundo

4. Métricas principais (Conhecimento essencial)

Conclusão: Foque em %iowait (espera de CPU), %util (saturação), await (latência) juntos.

4-1. %iowait (lado da CPU)

  • 10%+: I/O wait notável
  • 20%+: I/O de disco é quase certamente o gargalo

CPU quer trabalhar mas está presa esperando o disco.

4-2. %util (lado do disco)

  • 70% ou menos: Bastante folga
  • 80-90%: Ficando congestionado
  • 100% constante: Completamente saturado

4-3. await (Tempo de espera)

  • Poucos ms: Normal
  • 10ms+: Lento
  • 50ms+: Visivelmente lento
  • 100ms+: Crítico

4-4. r/s w/s (Taxa de leitura/escrita)

Informa se leituras ou escritas são o problema. Logs inchados e escritas de DB elevam w/s.

5. Padrões comuns

Conclusão: Três padrões: iowait+útil altos, CPU+I/O combinados, ou await alto com útil baixo.

Padrão A: CPU baixa mas lento

  • %iowait alto
  • %util alto

Gargalo clássico de I/O de disco

Padrão B: CPU e I/O altos ao mesmo tempo

  • %user / %system alto
  • %iowait também alto

Processamento pesado + escritas pesadas em disco combinados

Padrão C: %util baixo mas ainda lento

  • %util baixo
  • await alto

O armazenamento em si é lento (armazenamento de rede, EBS, etc.)

6. Usando vmstat

Conclusão: Use vmstat 1 -- coluna b alta com coluna r baixa confirma que I/O é o gargalo.

$ vmstat 1

Colunas principais:

  • b: Processos esperando I/O (alto = problema)
  • wa: I/O wait (10%+ = alerta)

Se r é baixo mas b é alto, I/O é a causa, não CPU.

7. Confirmando que disco é o culpado

Conclusão: Disco é confirmado quando %iowait, %util, await e vmstat b estão elevados.

Se TODOS estes são verdadeiros, disco é quase certamente a causa:

  • %iowait está alto
  • %util está alto
  • await está com picos
  • Coluna b do vmstat está aumentando

8. Causas comuns

Conclusão: Docker, bancos de dados, logs inchados e backups são os culpados mais comuns de I/O de disco.

  • Docker (logs, camadas, overlayfs)
  • Bancos de dados (MySQL / PostgreSQL)
  • Logs inchados (access.log, error.log)
  • Backups (rsync, tar)
  • Cron jobs pesados

9. O que NÃO fazer

Conclusão: Três erros: julgar apenas por CPU, reiniciar cedo e confiar apenas em %util.

Erro 1: Julgar "Tudo certo" apenas pela CPU

Um acidente clássico por ignorar I/O wait.

Erro 2: Reiniciar imediatamente

As evidências de I/O desaparecem. Observe primeiro.

Erro 3: Confiar apenas em %util

await pode estar péssimo mesmo quando %util parece normal.

Template para copiar e colar

# Detalhes de disco (mais importante)
iostat -xz 1

# Visao geral
vmstat 1

# Lista de discos
lsblk
df -h

Resumo

  • "Lento" nem sempre significa CPU
  • %iowait e %util são os eixos de decisão
  • iostat e vmstat andam juntos
  • Siga a ordem: observar -> identificar causa -> agir

Próximas leituras