A Linux host is reporting a high load average but CPU utilization looks low. How do you find out what is actually driving the load?
Quick Answer
Load average on Linux counts processes in uninterruptible sleep (D state) as well as runnable ones, so a high load with low CPU usually means processes are blocked on I/O, not CPU. Check `ps` for D-state processes, `vmstat`/`iostat` for I/O wait, and `/proc/pressure` for PSI breakdown.
Detailed Answer
Linux load average is often misread as a pure CPU metric. It actually reflects the number of processes in the run queue (runnable, waiting for CPU) plus processes in uninterruptible sleep (D state, usually waiting on disk I/O, NFS, or certain kernel locks). So "high load, low %CPU" is a strong signal that something is stuck on I/O rather than compute-bound.
Start with ps -eo pid,stat,comm | grep " D" to find processes currently in uninterruptible sleep, then check what they are blocked on with cat /proc/<pid>/stack (if available) or ls -l /proc/<pid>/fd to see what files/sockets they hold. Cross-check with vmstat 1 for the b (blocked) column and wa (I/O wait) percentage, and iostat -x 1 to see if a specific block device has high %util or await. On modern kernels, /proc/pressure/io and /proc/pressure/cpu give a direct, load-average-independent view of how much time tasks actually spend stalled on each resource, which is a much cleaner signal than load average alone. Also check for NFS or other network filesystem mounts — a slow or hung NFS server is one of the most common causes of a pile of D-state processes with load average climbing while CPU stays idle.
Code Example
# Find processes stuck in uninterruptible sleep ps -eo pid,ppid,stat,wchan:32,comm | awk '$3 ~ /D/' # I/O wait and blocked-process trend vmstat 1 5 # Per-device saturation and latency iostat -x 1 5 # Direct pressure-stall breakdown (kernel 4.20+) cat /proc/pressure/io cat /proc/pressure/cpu # What is a specific D-state process actually waiting on cat /proc/<pid>/stack # requires CONFIG_STACKTRACE / root ls -l /proc/<pid>/fd
Interview Tip
The interview signal here is knowing that Linux load average includes D-state (I/O-blocked) processes, not just CPU-runnable ones — that single fact reframes the whole investigation.