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 voce vai aprender

  • Como determinar se I/O de disco e o gargalo quando o servidor esta lento
  • Como usar iostat / vmstat para distinguir espera de CPU vs congestionamento de disco
  • Como sair do estado de "nao sei o que esta acontecendo"

Resumo rapido

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 e a causa? -> vmstat 1

Pre-requisitos

  • SO: Ubuntu
  • Publico: Iniciantes em servidores
  • Objetivo: Isolamento e diagnostico

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

Conclusao: I/O de disco lento significa que %iowait sobe mesmo quando a utilizacao de CPU parece baixa.

"Disco lento" geralmente significa uma destas situacoes:

  • Aplicacao esperando resposta do disco
  • Escritas de log ficando acumuladas
  • DB / Docker / backups consumindo I/O
  • CPU esta ociosa mas presa esperando I/O

Olhar apenas CPU% vai sempre levar a conclusao errada.

2. Instalando iostat

Conclusao: Instale sysstat via apt para obter iostat -- ele nao vem por padrao no Ubuntu.

$ sudo apt update
$ sudo apt install -y sysstat

3. Usando iostat -xz

Conclusao: Execute iostat -xz 1 para estatisticas por segundo -- -x revela as metricas chave de I/O.

$ iostat -xz 1

Opcoes:

  • -x: Estatisticas estendidas (essencial)
  • -z: Ocultar linhas zeradas (saida mais limpa)
  • 1: Atualizar a cada 1 segundo

4. Metricas principais (Conhecimento essencial)

Conclusao: Foque em %iowait (espera de CPU), %util (saturacao), await (latencia) juntos.

4-1. %iowait (lado da CPU)

  • 10%+: I/O wait notavel
  • 20%+: I/O de disco e quase certamente o gargalo

CPU quer trabalhar mas esta 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+: Critico

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

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

5. Padroes comuns

Conclusao: Tres padroes: iowait+util altos, CPU+I/O combinados, ou await alto com util baixo.

Padrao A: CPU baixa mas lento

  • %iowait alto
  • %util alto

Gargalo classico de I/O de disco

Padrao B: CPU e I/O altos ao mesmo tempo

  • %user / %system alto
  • %iowait tambem alto

Processamento pesado + escritas pesadas em disco combinados

Padrao C: %util baixo mas ainda lento

  • %util baixo
  • await alto

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

6. Usando vmstat

Conclusao: Use vmstat 1 -- coluna b alta com coluna r baixa confirma que I/O e o gargalo.

$ vmstat 1

Colunas principais:

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

Se r e baixo mas b e alto, I/O e a causa, nao CPU.

7. Confirmando que disco e o culpado

Conclusao: Disco e confirmado quando %iowait, %util, await e vmstat b estao elevados.

Se TODOS estes sao verdadeiros, disco e quase certamente a causa:

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

8. Causas comuns

Conclusao: Docker, bancos de dados, logs inchados e backups sao 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 NAO fazer

Conclusao: Tres erros: julgar apenas por CPU, reiniciar cedo e confiar apenas em %util.

Erro 1: Julgar "Tudo certo" apenas pela CPU

Um acidente classico por ignorar I/O wait.

Erro 2: Reiniciar imediatamente

As evidencias de I/O desaparecem. Observe primeiro.

Erro 3: Confiar apenas em %util

await pode estar pessimo 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 sao os eixos de decisao
  • iostat e vmstat andam juntos
  • Siga a ordem: observar -> identificar causa -> agir

Proximas leituras