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/vmstatpara 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:
- CPU ociosa mas lento? ->
iostat -xz 1 - I/O wait alto? -> Verifique
%iowait - Congestionamento de escrita? -> Verifique
await / %util - 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
sysstatviaaptpara obteriostat-- ele nao vem por padrao no Ubuntu.
$ sudo apt update $ sudo apt install -y sysstat
3. Usando iostat -xz
Conclusao: Execute
iostat -xz 1para estatisticas por segundo ---xrevela 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
%iowaitalto%utilalto
Gargalo classico de I/O de disco
Padrao B: CPU e I/O altos ao mesmo tempo
%user/%systemalto%iowaittambem alto
Processamento pesado + escritas pesadas em disco combinados
Padrao C: %util baixo mas ainda lento
%utilbaixoawaitalto
O armazenamento em si e lento (armazenamento de rede, EBS, etc.)
6. Usando vmstat
Conclusao: Use
vmstat 1-- colunabalta com colunarbaixa 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,awaite vmstatbestao elevados.
Se TODOS estes sao verdadeiros, disco e quase certamente a causa:
%iowaitesta alto%utilesta altoawaitesta com picos- Coluna
bdovmstatesta 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
%iowaite%utilsao os eixos de decisaoiostatevmstatandam juntos- Siga a ordem: observar -> identificar causa -> agir