You run uptime and see three numbers:
load average: 0.42, 0.58, 0.61
Are they percentages? CPU usage? The number of running processes? And at what point is the server overloaded?
Linux load average measures how much work is running or waiting for system resources. The values make sense only when you compare them with the number of CPU cores and investigate what is causing the queue.
- Quick answer
- Check Load Average with uptime
- What Linux Load Average Actually Counts
- Compare Load with the Number of CPUs
- Normalize load per CPU
- Read the Direction of the Three Values
- Load is rising
- Load is falling
- Load is steady
- Load Average Is Not CPU Usage
- Inspect CPU and Load with top
- Find CPU-Hungry Processes
- Do not kill a process only because it is first in top
- Check Whether I/O Is Causing the Load
- Inspect Process States
- Check for VPS CPU Steal Time
- Why a Short Load Spike May Be Normal
- A Practical High-Load Troubleshooting Sequence
- Common Load Average Mistakes
- Treating load as a percentage
- Using one universal threshold
- Assuming high load always means insufficient CPU
- Reacting to a single sample
- Linux Load Command Cheat Sheet
- FAQ
- What is a good load average?
- Can load average be higher than the CPU count?
- Why is load high when CPU usage is low?
- Does adding more vCPU always reduce load?
- Final Thoughts
- Continue Learning
Quick answer
The three load average values represent roughly the last 1, 5, and 15 minutes. On a 4-CPU server, a sustained load near 4 means the available CPUs are broadly occupied; a load well above 4 means work is queueing. But load can also rise because tasks are waiting for disk or other uninterruptible I/O, so load average is not the same as CPU percentage.
Check Load Average with uptime
uptime
Example:
14:26:11 up 18 days, 3:42, 2 users, load average: 1.24, 0.96, 0.71
The output includes:
- the current time;
- how long the server has been running;
- the number of logged-in users;
- load average over approximately 1, 5, and 15 minutes.
| Value | Period | What it helps show |
|---|---|---|
1.24 | About 1 minute | Very recent activity |
0.96 | About 5 minutes | Short-term trend |
0.71 | About 15 minutes | Broader recent baseline |
What Linux Load Average Actually Counts
A beginner-friendly mental model is a queue of tasks that are either:
- running on a CPU;
- ready to run and waiting for CPU time;
- waiting in uninterruptible sleep, commonly for I/O.
This last point matters. A high load does not prove that the CPU itself is the bottleneck. Slow storage, a stalled network filesystem, or other I/O waits can raise load while CPUs remain partly idle.
Compare Load with the Number of CPUs
nproc
Suppose the command returns:
4
The operating system can schedule work across four logical CPUs. A simplified interpretation is:
| Load on 4 CPUs | Approximate interpretation |
|---|---|
1.00 | Plenty of CPU capacity remains |
4.00 | The CPUs are broadly occupied |
6.00 | Some work is running while other work waits |
12.00 | A substantial queue or I/O wait deserves investigation |
This is a useful first approximation, not a universal alert rule. Workloads are bursty, logical CPUs are not all equally powerful, and I/O waits can contribute to load.
Normalize load per CPU
You can divide the load by the CPU count to compare servers of different sizes.
normalized load = load average / logical CPU count
For example, load 4 on a 4-CPU VPS gives a normalized value of 1.0. Load 4 on a 16-CPU server gives 0.25.
Read the Direction of the Three Values
The relationship between the 1, 5, and 15 minute values tells you whether pressure is rising or falling.
Load is rising
load average: 6.20, 3.10, 1.40
The recent 1-minute value is much higher than the longer averages. A new spike may be developing.
Load is falling
load average: 1.20, 3.40, 5.80
The immediate load is lower than it was over the previous 5 and 15 minutes. The server may be recovering from a completed backup, deployment, or traffic spike.
Load is steady
load average: 2.10, 2.06, 2.02
The workload has been relatively stable. Whether it is healthy depends on CPU count, response time, and the cause of the load.
Load Average Is Not CPU Usage
CPU usage describes how CPU time is being spent. Load average describes the amount of runnable or uninterruptibly waiting work.
A server can therefore show:
- high CPU usage and high load because many processes need CPU time;
- low CPU usage and high load because tasks are stuck waiting for I/O;
- a brief 100% CPU spike without a serious sustained load problem;
- moderate CPU usage but poor application latency for a separate reason.
Always compare load with CPU utilization, I/O wait, process state, and user-facing performance.
Inspect CPU and Load with top
top
The first lines show load average, task counts, CPU states, memory, and swap. A CPU line may look like this:
%Cpu(s): 68.4 us, 10.2 sy, 0.0 ni, 18.1 id, 3.0 wa, 0.3 st
| Field | Meaning | What high values may suggest |
|---|---|---|
us | User-space CPU time | Application, database, compression, or computation work |
sy | Kernel CPU time | Heavy system calls, networking, or kernel activity |
id | Idle CPU time | High idle means CPU capacity remains |
wa | Time waiting for I/O | Storage or I/O bottlenecks |
st | Time taken by the hypervisor from this VM | Host contention on a virtual server |
Press Shift+P in top to sort processes by CPU usage and q to exit.
Find CPU-Hungry Processes
ps -eo pid,user,stat,%cpu,%mem,comm --sort=-%cpu | head
This gives a static list of the current highest CPU consumers.
Common causes include:
- database queries;
- PHP, Python, Node.js, or Java workers;
- compression and backups;
- software compilation;
- malfunctioning scheduled jobs;
- unexpected or compromised processes.
Do not kill a process only because it is first in top
A process using a full CPU core may be doing legitimate work. Confirm what it is, inspect its service and logs, and understand the impact before terminating it.
Check Whether I/O Is Causing the Load
Start with:
vmstat 1
Watch these columns:
r— runnable tasks waiting for CPU;b— tasks blocked in uninterruptible sleep;usandsy— user and system CPU time;id— idle CPU;wa— I/O wait.
A consistently large r value relative to CPU count can indicate CPU contention. A growing b value and high wa, especially with idle CPU remaining, point more strongly toward I/O.
If the iostat tool is installed, use:
iostat -xz 1
This can reveal device latency, queueing, and utilization. On Debian or Ubuntu, iostat is provided by the sysstat package.
Inspect Process States
ps -eo state,pid,ppid,comm,wchan:32 --sort=state
Important state codes include:
| State | Meaning |
|---|---|
R | Running or runnable |
S | Interruptible sleep, common for waiting processes |
D | Uninterruptible sleep, often associated with I/O |
Z | Zombie process awaiting collection by its parent |
Many persistent D state processes can explain high load with modest CPU usage. Investigate the resource named in wchan, storage health, mounts, and kernel logs.
Check for VPS CPU Steal Time
On a VPS, the hypervisor schedules your virtual CPUs on physical hardware shared with other virtual machines. In top, the st field represents steal time: time when your VM wanted to run but the hypervisor scheduled something else.
Brief non-zero values may occur on shared infrastructure. Persistent, material steal time during performance problems can indicate host contention or a restrictive CPU allocation.
Collect measurements across busy and quiet periods before deciding that the provider is the cause.
Why a Short Load Spike May Be Normal
Many server tasks intentionally use available resources for a short time:
- log rotation and compression;
- package updates;
- database maintenance;
- backups;
- scheduled reports;
- traffic bursts;
- application deployments.
A one-minute spike that falls quickly and causes no meaningful latency may require no action. Sustained queueing, repeated spikes at the same time, timeouts, or slow requests deserve investigation.
A Practical High-Load Troubleshooting Sequence
uptime
nproc
top
ps -eo pid,user,stat,%cpu,%mem,comm --sort=-%cpu | head
vmstat 1
iostat -xz 1
systemctl --failed
journalctl -p err -b
- Confirm whether the load is rising, falling, or stable.
- Compare it with the number of logical CPUs.
- Check CPU idle, I/O wait, and steal time.
- Identify the processes using CPU and their states.
- Check storage if tasks are blocked or I/O wait is high.
- Inspect failed services and recent errors.
- Correlate the time with backups, cron jobs, deployments, and traffic.
Common Load Average Mistakes
Treating load as a percentage
A load of 2.0 does not mean 2% or 200% CPU. It is a measure of running and waiting work and must be interpreted against CPU count.
Using one universal threshold
Load 4 has a different meaning on a 1-CPU VPS and a 16-CPU server. Alert thresholds should reflect the machine and workload.
Assuming high load always means insufficient CPU
Uninterruptible I/O waits can raise load. Check wa, blocked tasks, device latency, mounts, and kernel messages.
Reacting to a single sample
The trend and user impact matter. Compare the three averages and observe the system over time.
Linux Load Command Cheat Sheet
| Command | Purpose |
|---|---|
uptime | Show 1, 5, and 15 minute load averages |
nproc | Show available logical CPUs |
top | View live load, CPU states, and processes |
ps ... --sort=-%cpu | List current high-CPU processes |
vmstat 1 | Watch runnable tasks, blocked tasks, CPU, and I/O wait |
iostat -xz 1 | Inspect storage latency and utilization |
journalctl -p err -b | Show current-boot error messages |
FAQ
What is a good load average?
There is no single good value. Compare sustained load with the number of CPUs, response-time targets, and normal baseline. A 4-CPU server with load near 1 has considerable headroom; a 1-CPU server with sustained load 4 has significant queueing or waiting work.
Can load average be higher than the CPU count?
Yes. It means more tasks are running or waiting than the CPUs can immediately execute, or tasks are contributing through uninterruptible waits. Short periods can be normal; sustained excess deserves investigation.
Why is load high when CPU usage is low?
Processes may be waiting in uninterruptible sleep for storage, a network filesystem, or another kernel-level resource. Check I/O wait, blocked tasks, device latency, mounts, and kernel logs.
Does adding more vCPU always reduce load?
No. More CPU can help a CPU-bound queue, but it will not fix slow storage, locked application resources, network filesystem problems, or poorly configured software.
Final Thoughts
Load average is an early warning signal, not a diagnosis.
Read the 1, 5, and 15 minute values as a trend, compare them with nproc, and then inspect CPU idle time, I/O wait, steal time, process usage, and process states. This turns three mysterious numbers into a practical starting point for Linux performance troubleshooting.







