How to Diagnose High Disk I/O Wait and Slow Storage Performance

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 CauseSolution
Database inefficiencyQuery/index optimization (see database performance guides)
Insufficient RAM causing swapAdd RAM, or optimize memory usage
Backup during peak hoursReschedule to off-peak times
Genuinely inadequate storage tierUpgrade 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

Browse more articles in Troubleshooting & FAQ.

  • high io wait, iotop diagnose disk, disk performance troubleshooting, iostat linux
  • 0 istifadəçi bunu faydalı hesab edir
Bu cavab sizə kömək etdi?

Uyğun məqalələr

Website Down? A Step-by-Step Troubleshooting Checklist

When a website goes down, working through checks in the right order saves critical time. This...

VPS Unreachable/Can't Connect via SSH: Troubleshooting Guide

Losing SSH access to your VPS is stressful, but most causes are fixable without needing to...

How to Fix "No Space Left on Device" Errors

A full disk can silently break databases, log writing, package installations, and web...

How to Diagnose and Fix High CPU Usage on a VPS

Sustained high CPU usage can slow down your entire server and every application running on it....

How to Diagnose and Fix Out of Memory (OOM) Errors

When a Linux server runs out of available RAM, the kernel's OOM (Out of Memory) killer forcibly...