sysstat and run iostat -xyz 5 to see each disk’s reads and writes per second, wait time (r_await, w_await) and busy time (%util). Then find the process doing the I/O with sudo iotop-c -o (Ubuntu/Debian) or pidstat -d 5, which works on every distribution. High %iowait in top is the usual first sign of a disk bottleneck.
Before you start
- Connect with SSH. Root users can leave out
sudo. - These tools only read statistics. They don’t add load or change data.
- Know your disk name: run
lsblk -d. VPS disks are usuallyvdaorsda; NVMe disks on dedicated servers arenvme0n1.
How to install iostat and iotop
- Ubuntu / Debian
- AlmaLinux / Rocky
sysstat provides iostat and pidstat. iotop-c is the maintained C version of iotop.How to check disk I/O with iostat
-x shows extended statistics, -y skips the first report (an average since boot), -z hides idle disks, and 5 prints a new report every 5 seconds. Press Ctrl+C to stop.
The
iostat manual warns that %util near 100% means saturation only for devices that handle one request at a time. SSDs, NVMe drives, RAID arrays and virtual disks handle many requests in parallel, so for them look at await and aqu-sz too.How to find which process is using the disk
- iotop (Ubuntu / Debian)
- pidstat (any distribution)
-o shows only processes doing I/O and -P shows processes instead of threads. Press q to quit. For a log-friendly snapshot:Why iotop shows “unavailable” in the SWAPIN and IO columns
Since Linux 5.14 the kernel’s task delay accounting is off by default, and iotop needs it for those two columns. Turn it on while you investigate:sudo sysctl kernel.task_delayacct=0. The iotop manual advises keeping it off when not in use because it costs some performance. In interactive iotop, Ctrl+T toggles it.
What causes high disk I/O and how to fix it
To make a job yield to everything else, run it in the idle I/O class:
-c3 (idle) only gets disk time when no other program has asked for disk I/O for a short grace period. Ordinary users can use the idle class; the realtime class (-c1) needs root and can starve other programs, so avoid it.
How to check it worked
Runiostat -xyz 5 again after your change. await and aqu-sz should fall, and %iowait in top should drop close to 0 when the server is quiet.
Frequently asked questions
What is a normal await value?
There is no single number. It depends on the disk type and request size. Measure when the server is healthy and compare with that baseline; a sudden jump is what matters.How do I measure maximum disk speed?
Usefio with a test file. It creates heavy load, so read benchmark your VPS first.
Why does iostat show different numbers the first time?
The first report is the average since boot.-y skips it, so you only see live values.
Is high iowait always a disk problem?
Usually, but network storage and a full swap can also cause it. Checkvmstat 1 5 for swap activity (si/so) and the disk health with smartctl on dedicated servers.
Related guides
VPS and dedicated server guides
Every server guide in one place.
Benchmark your VPS
fio, YABS and Geekbench.
What is load average?
Why disk waits raise the load.
Find what is using disk space
du and ncdu.
Check disk health
SMART tests on physical disks.
VPS Panel resource graphs
Disk activity over time.
Checked against the iostat(1), pidstat(1), iotop and ionice(1) manuals on 4 November 2026; commands tested on Ubuntu 24.04 LTS (sysstat 12.6.1, iotop-c 1.26). Commands can differ on other distributions or releases.
Need Extra Help?
If you encounter any issues, our support team is ready to assist:- Live Chat: Quick assistance via our website.
- Support Ticket: Open a Ticket
- Discord: Join our Community
- Email: support@freakhosting.com
Last Updated: November 2026