Skip to content
Calcrivo

CPU Bottleneck Calculator

Detect CPU bottlenecks from user/system time, iowait percentage and load average.

Inputs

Diagnosis

No bottleneck signature detected — CPU, I/O and load are within healthy ranges.

Bottleneck Detected?

false

User + System %

75.0%

Load Average Threshold (2× cores)

8

CPU-Bound Bottleneck?

false

I/O Bottleneck?

false

Load/Overload Bottleneck?

false

Step by step

  1. Values used

    %user (from top/mpstat) = 55; %system (from top/mpstat) = 20; %iowait (from top/mpstat) = 8; Load Average (1-min) = 6; CPU Cores = 4

  2. Bottleneck thresholds

    CPU-bound if (user% + system%) > 80; I/O-bound if iowait% > 20; overloaded if load_avg > 2 × cores

  3. Diagnosis

    = No bottleneck signature detected — CPU, I/O and load are within healthy ranges.

  4. Bottleneck Detected?

    = No

  5. User + System %

    = 75.0

  6. Load Average Threshold (2× cores)

    = 8

  7. CPU-Bound Bottleneck?

    = No

  8. I/O Bottleneck?

    = No

How it works

Distinguishing a CPU-bound bottleneck from an I/O-bound one from simple overload matters because the fix differs for each: sustained %user+%system above 80% points to genuinely CPU-hungry workloads (needing more cores, code optimization, or horizontal scaling); %iowait above 20% points to processes blocked waiting on disk or network I/O (needing faster storage, more caching, or async I/O); and load average exceeding roughly 2× core count indicates more runnable/blocked tasks queued than the system can service, regardless of which resource is the root cause.

Formula

Bottleneck thresholds

CPU-bound if (user% + system%) > 80; I/O-bound if iowait% > 20; overloaded if load_avg > 2 × cores

u
%user
s
%system
w
%iowait
L
load average
c
core count

Frequently Asked Questions

What's the difference between a CPU bottleneck and a load average bottleneck?

A CPU bottleneck (high user+system time) means the CPUs themselves are saturated doing work. A high load average can occur even with idle CPUs if many processes are blocked waiting on I/O (uninterruptible sleep) rather than actually running — load average counts both runnable and I/O-blocked tasks, so it doesn't by itself distinguish the cause.

Why is high iowait not always a disk problem?

iowait specifically measures CPU idle time while waiting for outstanding I/O to complete, so it can also spike from network filesystem latency (NFS, network block storage) or even swap activity under memory pressure — not exclusively local disk hardware. Correlate with `iostat -x` and `vmstat` to pin down the actual I/O source.

Are these thresholds (80%, 20%, 2×cores) universal?

They're reasonable general-purpose rules of thumb, not hard physical limits — some latency-sensitive workloads want alerts well below 80% CPU, while some batch/background systems tolerate load average well above 2× cores. Treat them as a starting point and tune based on your workload's actual latency requirements.

You might also need