iostat - Cheatsheet de Estatísticas de CPU e I/O de Disco
iostat relata utilização de CPU e estatísticas de I/O de disco por dispositivo — throughput, IOPS, latência de requisição e queue depth. É a parada padrão primeiro para diagnosticar gargalos de armazenamento no Linux: o disco está saturado, as requisições estão enfileirando, a latência está disparando? Está incluído como parte do pacote sysstat ao lado de mpstat, pidstat e sar.
Instalação
| Platform | Command |
|---|
| Debian/Ubuntu | sudo apt install sysstat |
| Fedora/RHEL | sudo dnf install sysstat |
| Arch Linux | sudo pacman -S sysstat |
| macOS | iostat é built-in (saída diferente) |
| Verificar | iostat -V |
Uso Básico
| Command | Descrição |
|---|
iostat | Um relatório desde boot (CPU + devices) |
iostat 2 | Atualize a cada 2 segundos |
iostat 2 5 | 5 relatórios, 2 segundos de intervalo |
iostat -x | Stats estendidas (as úteis) |
iostat -d | Stats somente de device (sem CPU) |
iostat -c | Stats somente de CPU |
O Comando Que Você Realmente Quer
# Estendido, legível por humano, por-device, a cada 2s
iostat -xmt 2
| Flag | Efeito |
|---|
-x | Estatísticas estendidas (util%, await, aqu-sz, …) |
-m | Relato em MB/s (use -k para KB/s) |
-t | Imprima um timestamp com cada relatório |
-p DEV | Mostre partições de um device (ex. -p sda) |
-d 2 | Relatório de device a cada 2 segundos |
-h | Formatação legível por humano, amigável a NVMe |
Lendo Saída Estendida (-x)
| Column | Significado |
|---|
r/s, w/s | Requisições de leitura/escrita por segundo (IOPS) |
rMB/s, wMB/s | Throughput de leitura/escrita |
rareq-sz / wareq-sz | Tamanho médio de requisição |
r_await, w_await | Latência média de leitura/escrita (ms) — métrica chave |
aqu-sz | Profundidade média de fila (requisições em voo) |
%util | Fração de tempo o device estava ocupado |
Interpretando os Sinais
| Observação | Interpretação |
|---|
%util perto de 100% | Device está saturado (cuidado com SSD/NVMe — podem paralelizar) |
await alto (dezenas de ms+) | Requisições são lentas — gargalo de latência |
aqu-sz alto | Requisições acumulando mais rápido que o disco drena |
| IOPS alto, throughput baixo | Pequeno I/O aleatório (típico DB/workload de metadados) |
| IOPS baixo, throughput alto | Grande I/O sequencial (backups, streaming) |
Em SSD/NVMe moderno, %util pode ler 100% enquanto o device ainda tem headroom (atende requisições em paralelo). Confie mais em await e aqu-sz que em %util ali.
Seção CPU
| Field | Significado |
|---|
%user / %nice | Tempo em espaço usuário |
%system | Tempo no kernel |
%iowait | CPU ocioso aguardando I/O (dica de pressão de armazenamento) |
%steal | Tempo roubado pelo hypervisor (vizinhos barulhentos) |
%idle | Tempo ocioso |
%iowait alto ao lado de await de disco alto aponta direto para armazenamento como o gargalo.
Fluxos de Trabalho Comuns
# Assista um gargalo de disco suspeito ao vivo
iostat -xmt 2
# Focalize um device e suas partições
iostat -xmt -p nvme0n1 2
# Correlacione CPU iowait com latência de device durante um teste de carga
iostat -xmt 1 60 > iostat.log
iostat vs Ferramentas Relacionadas
| Tool | Foco |
|---|
| iostat | I/O por-device + stats de CPU |
| iotop | Qual processo está fazendo o I/O |
| dstat/dool | CPU/disk/net combinado em uma view |
| sar | Atividade de sistema histórica/registrada |
Use iostat para ver o device é lento, depois iotop para descobrir qual processo é responsável.
Recursos