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/vmstatpara 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:
- CPU ociosa mas lento? ->
iostat -xz 1 - I/O wait alto? -> Verifique
%iowait - Congestionamento de escrita? -> Verifique
await / %util - 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
sysstatviaaptpara obteriostat-- 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 1para estatísticas por segundo ---xrevela 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
%iowaitalto%utilalto
Gargalo clássico de I/O de disco
Padrão B: CPU e I/O altos ao mesmo tempo
%user/%systemalto%iowaittambém alto
Processamento pesado + escritas pesadas em disco combinados
Padrão C: %util baixo mas ainda lento
%utilbaixoawaitalto
O armazenamento em si é lento (armazenamento de rede, EBS, etc.)
6. Usando vmstat
Conclusão: Use
vmstat 1-- colunabalta com colunarbaixa 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,awaite vmstatbestão elevados.
Se TODOS estes são verdadeiros, disco é quase certamente a causa:
%iowaitestá alto%utilestá altoawaitestá com picos- Coluna
bdovmstatestá 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
%iowaite%utilsão os eixos de decisãoiostatevmstatandam juntos- Siga a ordem: observar -> identificar causa -> agir