Migrate to RunxBuild and earn up to $50 in hosting credit on your first deposit.

Calculate your savings
unxBuild

Check CPU Usage Linux: top, htop, and Reading the Output Right

Sean

Platform Writer

Jul 05, 2026
5 min read

Check CPU usage on Linux with top (the default), htop (better UI), or mpstat -P ALL 1 (per-CPU). The header line shows system-wide CPU breakdown: user, system, idle, iowait, steal. The process list shows per-process usage. The team that knows which field answers which question finds the answer fast.

Check CPU Usage Linux: top, htop, and Reading the Output Right

Table of contents

top: the default

top

The first thing to look at is the header line:

%Cpu(s): 12.5 us,  2.1 sy,  0.0 ni, 79.8 id,  5.3 wa,  0.0 hi,  0.3 si,  0.0 st
  • us (user): Programs running in user space. Normal applications.
  • sy (system): Kernel code. High values mean kernel work (syscalls, IO, drivers).
  • ni (nice): Niced processes (lower priority).
  • id (idle): Doing nothing.
  • wa (iowait): Waiting for IO. High values = disk bottleneck.
  • hi (hardware interrupt): Hardware IRQ handlers.
  • si (software interrupt): Softirq handlers (network stack, etc.).
  • st (steal): Time the hypervisor gave to other VMs (cloud).

The team that sees high wa has an IO bottleneck. The team that sees high us has a CPU-bound application. The team that sees high st has hypervisor contention.

Per-CPU view

Press 1 in top to toggle per-CPU breakdown. Useful for finding single-threaded bottlenecks:

%Cpu0  :  8.0 us,  1.5 sy,  0.0 ni, 85.0 id,  5.5 wa
%Cpu1  : 95.0 us,  1.0 sy,  0.0 ni,  4.0 id,  0.0 wa

CPU1 at 95% user = single-threaded hot loop. The team that finds this knows the workload doesn’t parallelize well.

htop: better interactive view

htop

Same data as top, with:

  • Color (user/system/idle colors).
  • Per-CPU bars by default (no need to press 1).
  • Mouse support (click column headers to sort).
  • Visual process tree (F5).
  • Easier kill (F9 or click).

The team that uses htop on regular Linux machines doesn’t go back to top.

mpstat: detailed per-CPU over time

mpstat -P ALL 1

Refreshes every second. Shows the same fields as top’s CPU header but per-CPU and over time. The team that wants to see how CPU usage changes over time uses mpstat instead of top.

vmstat: CPU + memory + IO together

vmstat 1

Output:

procs ---memory--- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 102400  20480 204800    0    0     0     5   50  100 12  2 80  5  0

The right side shows the same CPU breakdown as top. The team that wants CPU + memory + IO in one view uses vmstat.

FAQ

What is a normal CPU usage?

Depends. Idle servers often sit at 1-10% (waiting for requests). Active servers: 30-70% is normal, with bursts to 90%+. Sustained >80% means the system is CPU-bound and may need scaling.

Why is iowait high?

The CPU is waiting for IO (disk, network). High iowait with low user/system = disk is the bottleneck. The team that sees this checks iostat -x 1 for per-disk latency and queue depth.

What is a good CPU steal time?

Under 5% is normal. Over 10% means the hypervisor is oversubscribed. The team that sees this on a cloud VM considers a different instance type or a different cloud region.

How do I check CPU usage from a remote server?

SSH in and run top or htop. Or use monitoring (Prometheus node_exporter + Grafana, Datadog, etc.) for historical views. The team that has monitoring set up doesn’t need to SSH for routine checks.

Why does my CPU show 200%?

Multi-threaded process using 2 cores fully. Each core is 100%, the process gets 200%. The team that has 32 cores sees 3200% on a fully parallel workload.

If you are sizing the infrastructure for the kind of project this post covers, the RunxBuild hosting calculator is the right place to model the line items. The compute, the memory, the storage, the bandwidth, the database - each one is a separate number, and the team’s mental model for the platform is the sum of those numbers. The RunxBuild dashboard is where the team sees the actual usage in one place.

Useful related references:

#linux#cpu#monitoring#dev-infra