The USE method & finding bottlenecks

A repeatable way to locate the constraint.

Advanced14 min · lesson 1 of 17

Performance problems are usually solved backwards — people guess a cause and start tuning, when the fast path is to methodically find the actual bottleneck first. The USE method gives you that method: for every resource (CPU, memory, disk, network), check three things — Utilization (how busy it is), Saturation (how much work is queued waiting for it), and Errors. Walk the resources, and the one that is saturated or erroring is your constraint. It turns "the server is slow" into a short, repeatable checklist.

The USE method: check every resource three ways
for each of CPU / memory / disk / network
Utilization
how busy? (% time working)
Saturation
how much is queued/waiting?
Errors
any failures? (often the real cause)
Saturation usually hurts before utilization hits 100%. Errors are cheap to check and frequently the answer.

The 60-second triage

Before deep tools, a fixed sequence of quick commands orients you in a minute: uptime for load trend, dmesg for recent errors, vmstat for CPU/memory/swap flow, and a glance at disk and network. This is the "first 60 seconds" checklist popularized by performance engineers — it tells you which resource to zoom into, so you spend your investigation where the problem actually is instead of tuning at random.

terminal
$ uptime # load trend (1/5/15 min) — rising or falling?
load average: 8.10, 5.22, 3.15 # climbing, and > CPU count = something is queuing
$ dmesg -T | tail # recent kernel errors (OOM kills, IO errors)?
$ vmstat 1 5 # r=run queue, si/so=swap, wa=IO wait, per second
$ mpstat -P ALL 1 3 # per-CPU utilization (is it one hot core or all?)

Read the constraint, then confirm the cause

The method finds the constrained resource; the next step is finding what is consuming it. High CPU utilization plus a high run queue points to CPU-bound work — then top or pidstat names the process. High IO wait points to disk — then iostat and iotop find the offender. The discipline is: identify the saturated resource first (USE), then drill into who is using it, rather than jumping straight to a process and guessing. The following lessons cover the per-resource tools.

Load average is not CPU usage
The most misread number in Linux: load average counts processes that are running OR waiting — including those blocked on disk IO — so a load of 8 on an idle-CPU box usually means IO saturation, not CPU. A load above your core count is a signal to investigate, not automatically "CPU is maxed." Always confirm with vmstat (is it the run queue r, or IO wait wa?) before concluding the CPU is the problem. Chasing CPU when the disk is the bottleneck wastes hours.