We use cookies to understand how the site is used and to display ads. Analytics and advertising only run after you accept. You can change your choice anytime. Privacy policy

Skip to content
devvkit
$devvkit learn --librarie iostat-&-dstat-guide

iostat & dstat Guide

[disk][io][cpu][performance]
System Monitoring
Install
# iostat: part of sysstat
sudo apt install sysstat
# dstat:
sudo apt install dstat
brew install dstat

iostat reports CPU and I/O statistics for devices and partitions. Key columns: `%iowait` (time CPU waits for I/O: high = storage bottleneck), `r/s` + `w/s` (read/write requests per second), `rkB/s` + `wkB/s` (throughput), and `await` (average I/O response time in ms).

dstat combines iostat, vmstat, netstat, and ifstat into one view. Run `dstat -c --top-cpu -d --top-bio --net` to see CPU hogs, disk hogs, and network in a single terminal. It's the best "I don't know what's wrong yet" tool.

iostat -x 10 shows extended stats every 10 seconds. Watch `avgqu-sz` (queue size >1 = congestion) and `svctm` (service time). For GUI monitoring, use Grafana with Prometheus + node_exporter for historical I/O trends.

iostat CPU

CPU report· CPU utilization breakdown.
iostat -c                  # CPU stats only
iostat -c 5                # Every 5 seconds
iostat -c -z 5             # Skip zeros
iostat -c -p ALL           # Per-processor stats
# Columns: %user, %nice, %system, %iowait, %steal, %idle

iostat Disk

Device report· Per-disk I/O stats.
iostat -d                 # Device stats
iostat -x                  # Extended stats (better!)
iostat -x 5 10             # Every 5s, 10 reports
iostat -x -p sda, sdb      # Specific devices
iostat -m                  # In MB/s instead of blocks/s

# -x columns:
# r/s, w/s, rkB/s, wkB/s, avgqu-sz, await, svctm, %util
Find slow disk· High await = slow.
iostat -x 2
# watch: await > 20ms = slow for SSD, > 100ms for HDD
# watch: %util near 100% = saturated device
# watch: avgqu-sz > 1 = requests queued

dstat

dstat: all-in-one· Everything at once.
dstat                       # CPU, disk, net, paging, system
dstat -c -d -n -m           # CPU + disk + net + memory
dstat --top-cpu --top-io --top-bio --top-mem
# See top processes by CPU, disk I/O, block I/O, memory
dstat: network· Network throughput.
dstat -n --net-packets     # Network bandwidth + packets
dstat -n --tcp              # TCP connections and segments
dstat --top-latency         # Process with highest latency
dstat --top-bio-adv         # Detailed block I/O per process
dstat: colored output· Visual gauges.
dstat --output report.csv  # Export to CSV for later
dstat --float               # Float numbers instead of integers
# Install dstat-colorized for colored output:
# pip install dstat-colorized

Analysis

Continuous monitoring· Log for later analysis.
# Log iostat to file:
iostat -x 30 > iostat.log &
# Run for a while, then analyze
awk '/^Device/ {header=$0; next} NF {print $1, $14, $15, $16}' iostat.log | head

# dstat to CSV:
dstat --output /tmp/dstat.csv -c -d -n 10 60
Trick: detect disk saturation· Quick health check.
iostat -x -z 1 3 | tail -20
# Healthy SSD: await < 5ms, %util < 50%
# Healthy HDD: await < 20ms, %util < 80%
# Saturation: await spikes, %util > 90%, svctm increases

# Check if I/O is the bottleneck:
iostat -c 1 3 | grep iowait
# %iowait > 10% → storage is suspect #1