High I/O wait indicates the CPU is spending significant time waiting on disk operations — a distinct bottleneck from CPU or memory exhaustion, requiring different diagnosis and solutions.
What I/O Wait Actually Means
The percentage of time the CPU is idle specifically because it's waiting for a pending disk I/O operation to complete — high I/O wait means your bottleneck is disk performance, not raw CPU processing power, even though it shows up in CPU-related monitoring.
Checking Current I/O Wait
top
The %wa value in top's header shows I/O wait percentage — consistently elevated values (context-dependent, but often notably above single digits) suggest a genuine disk bottleneck worth investigating.
Identifying Which Process Is Causing High I/O
sudo apt install iotop -y
sudo iotop
Shows real-time disk I/O usage per process, similar in spirit to how top shows CPU usage per process — directly identifies the specific culprit process.
Checking Overall Disk Performance
sudo apt install sysstat -y
iostat -x 2
Shows detailed per-disk statistics including utilization percentage and average wait time — a disk consistently near 100% utilization confirms it's genuinely saturated.
Common Causes of High I/O Wait
- A database performing many disk-intensive operations (poorly optimized queries, missing indexes — see How to Write and Optimize SQL Queries: Indexing Basics)
- Insufficient RAM causing excessive swap usage (swapping is itself a disk I/O-heavy operation)
- A backup process running during active production hours
- Underlying storage genuinely inadequate for the actual workload (slower storage tier than needed)
Checking for Swap-Related I/O
free -h
vmstat 2
High swap usage combined with high I/O wait strongly suggests insufficient RAM is the underlying cause, with disk I/O being a downstream symptom of swap activity rather than the primary issue itself.
Checking for a Runaway Backup or Batch Job
ps aux | grep -i backup
Verify no unexpected backup/batch process is running during a period you're investigating for I/O issues.
Solutions Based on Root Cause
| Root Cause | Solution |
|---|---|
| Database inefficiency | Query/index optimization (see database performance guides) |
| Insufficient RAM causing swap | Add RAM, or optimize memory usage |
| Backup during peak hours | Reschedule to off-peak times |
| Genuinely inadequate storage tier | Upgrade to faster storage (NVMe over standard SSD, for example) |
Verifying Storage Type
lsblk -d -o name,rota
rota=0 indicates SSD/NVMe (non-rotational); rota=1 indicates traditional spinning disk — confirm you're actually on the storage tier you expect, since this significantly affects baseline I/O performance capability.
Common Errors
High I/O wait with no obvious process cause in iotop — check for kernel-level or file system journaling overhead, or consider whether the underlying virtualized storage itself (shared with other tenants on the host, depending on your provider's architecture) might be a factor worth discussing with support.
Continue Reading
- How to Write and Optimize SQL Queries: Indexing Basics
- How to Enable and Configure Swap on a Linux VPS (Ubuntu & Debian)
- How to Diagnose a Slow VPS: Complete Performance Checklist
Browse more articles in Troubleshooting & FAQ.