From openai.gpt-5 response
A high load average means many tasks are either runnable (want CPU) or stuck in uninterruptible sleep (usually waiting on I/O) over time. It is not the same as high CPU usage. The goal is to determine whether the load is due to CPU saturation, slow I/O, memory pressure/thrashing, lock contention, or external factors (virtualization, NFS, cgroup limits).
uptime cat /proc/loadavg The fourth field in /proc/loadavg shows running/total tasks (e.g., 3/512). vmstat 1 Key columns: r: runnable tasks (CPU pressure). Persistently high r means CPU saturation.b: tasks in uninterruptible sleep (I/O wait). High b points to I/O or kernel waits.wa: CPU time waiting for I/O. High wa often accompanies high b.si/so: swap in/out. Non-zero indicates memory pressure/thrashing.top # press 1 for per-CPU mpstat -P ALL 1 If all CPUs are near 100% user/system, it’s CPU-bound. If %steal is high, you’re losing CPU to the hypervisor. top # press H to show threads; add WCHAN column htop pidstat -u -t 1 perf top # requires perf r in vmstat, high user/system in mpstat/top, low wa, low b. ps -eo pid,stat,comm,wchan:32 --sort=stat | grep ' D ' WCHAN hints (e.g., do_fsync, wait_on_page, nfs_wait_on_request). iostat -x 1 Look at: await or r_await/w_await: Average request latency. Hundreds of ms+ is bad.avgqu-sz: Queue depth; consistently > 1 indicates a bottleneck.%util near 100% indicates device saturation.iotop -oPa nfsiostat nfsstat dmesg | tail -n 200 journalctl -k Look for disk errors, “blocked for more than X seconds”, I/O timeouts, controller resets. cat /proc/pressure/io High “some” or “full” indicates I/O stalls affecting workloads. b in vmstat, high wa in CPU stats, many D-state tasks with I/O-related WCHAN, high disk await/queue. vmstat 1 # watch si/so free -h sar -r 1 # memory sar -W 1 # swapping pidstat -r 1 # major faults indicate disk-backed memory pressure cat /proc/pressure/memory dmesg | grep -E 'oom-killer|kswapd|memory' kswapd0 using CPU), high memory PSI; load rises even if CPU isn’t fully utilized because tasks stall on page faults and reclaim. pidstat -wt 1 ps -eo pid,stat,comm,wchan:32 | grep -E 'futex|rwsem|mutex' cat /proc/<pid>/stack strace -p <pid> perf lock record perf lock report futex/rwsem waits; CPU may be partly idle. mpstat -P ALL 1 # check %steal High %steal means hypervisor is taking CPU time. systemd-cgtop cat /sys/fs/cgroup/*/cpu.stat cat /sys/fs/cgroup/*/memory.pressure Throttling or tight limits can inflate load by keeping tasks runnable but capped. mpstat -I SUM 1 cat /proc/interrupts ss -s iftop / nload Network stalls can back filesystems (e.g., NFS). uptime; cat /proc/loadavgvmstat 1 # watch r, b, wa, si/sotop # press 1 for per-CPU; H for threads; note D-state processesmpstat -P ALL 1iostat -x 1iotop -oPapidstat -u -d -r -wt 1ps -eo pid,stat,comm,wchan:32 --sort=stat | grep ' D 'cat /proc/pressure/{cpu,io,memory}dmesg | tail -n 200perf.vm.swappiness.futex/rwsem hotspots with perf/perf lock.sar -q 1, netdata, collectd) to see when it rose./proc/pressure) is extremely useful to quantify whether stalls are CPU, I/O, or memory driven.