As a Linux system engineer, I’m sure you’ve all used the top
command.
It’s been the go-to tool for decades—simple, reliable, and always there when you need it.
But have you ever noticed one thing? Occasionally, you might spot a process with CPU usage skyrocketing to 150%, 200%, or even 400%! Surprised?
So what’s going on here? How is that possible?
Get Your Linux Course!
Join our Linux Course and discover the power of open-source technology. Enhance your skills and boost your career! Learn Linux today!At first glance, these numbers might seem like a mistake—after all, how can something use more than 100% of the CPU? Is the system broken? or hacked?
But in reality, this is completely normal. The reason lies in how Linux reports CPU usage and how multi-core processors function.
In this article, we’ll explore why this happens and prove it with practical tools and real-world examples.
Table of Contents
Checking CPU Utilization Using top
The CPU is the powerhouse of any operating system, executing instructions that allow programs to run.
In Linux, the top
command is a handy tool that provides real-time performance insights. It displays key system metrics like:
- Process usage
- Memory consumption
- CPU load
When a system experiences high CPU utilization, top
helps identify which processes are using the most resources, making it easier to diagnose performance issues.
To check CPU utilization, open a terminal and run:
top
This command generates a live performance overview. One of the most critical sections in the output is CPU usage per process.
Here is the output of the top command in my Linux.
You may notice that some processes show a CPU utilization exceeding 100%.
Example:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5424 root rt 0 1590640 176520 106044 S 150 0.5 395:13.89 YYYY
Here, process YYYY is consuming 150% CPU usage—but how is that possible?
Why CPU Utilization Exceeds 100%
Understanding Multi-Core Processing
Think of your CPU like a team of workers. In the past, computers had just one worker (single-core processors).
If a task needed 100% of that worker’s time, the system reported 100% CPU usage.
Now, modern CPUs have multiple workers (multi-core processors). If you have four cores, your system has four workers. A single task can be divided among multiple cores.
This means that one process could use 100% of two cores, leading to a 200% CPU usage report in top
.
We will prove it with tools later.
So, those high numbers aren’t a bug; they’re a testament to the power of modern, multi-core processing!
Key factors contributing to CPU usage over 100%:
- Multi-Core Processors: A CPU with multiple cores can handle multiple tasks at the same time.
- Workload Distribution: The Linux scheduler distributes workloads efficiently across cores.
- Multi-Threading: If a process is multi-threaded, it can utilize more than one core simultaneously.
How Linux Reports CPU Usage
Linux reports CPU usage based on a single core. This means that if a process is using 1.5 CPU cores, it will be displayed as 150% CPU usage in top
.
Example Breakdown:
- CPU-1 → Process
YYYY
is using 100% of this core. - CPU-2 → Another thread of
YYYY
is using 50% of this core.
Total CPU usage reported: 100% + 50% = 150%.
This behavior is also officially documented in the top
command manual:
In a true SMP (Symmetric Multiprocessing) environment, if a process is multi-threaded and top is not operating in Threads mode, amounts greater than 100% may be reported.
Simulating High CPU Usage: A Hands-On Example
Let’s create manual load to see how Linux reports it.
Step 1: Install the stress
Tool
sudo apt install stress
Step 2: Generate CPU Load
Run a command to fully utilize 4 CPU cores for 60 seconds:
stress --cpu 4 --timeout 60
Step 3: Monitor with top
and mpstat
- In one terminal, run
top
and press1
to see per-core usage. - In another, run
mpstat -P ALL 1
to track core utilization.
Expected Output
PID USER %CPU COMMAND
7890 user 400% stress
This confirms stress
is fully utilizing 4 cores.
Viewing Per-Thread CPU Usage
To get a more detailed breakdown of how CPU usage is distributed among threads, use:
top -H
This command displays each individual thread within a process, allowing you to see exactly how a process is utilizing multiple cores.
kill -9 <PID>
Check Your CPU Cores
Want to see how many cores your system has? Run:
nproc --all
If it outputs 4
, your system has four cores. If a process fully utilizes all four cores, top
could show 400% CPU usage.
Modern CPUs often use hyper-threading, where a single physical core behaves like two logical cores.
For example, a 4-core CPU with hyper-threading appears as 8 logical cores. This boosts parallel processing but also means Linux may report CPU usage as a percentage of these logical cores.
View CPU Usage Per Core
Want to see CPU usage for each core individually? Press 1
while top
is running.
You’ll see output like this:
%Cpu0 : 75.0 us, 0.0 sy, 0.0 ni, 25.0 id
%Cpu1 : 100.0 us, 0.0 sy, 0.0 ni, 0.0 id
%Cpu2 : 50.0 us, 0.0 sy, 0.0 ni, 50.0 id
%Cpu3 : 25.0 us, 0.0 sy, 0.0 ni, 75.0 id
Each core is handling its own share of tasks.
Customizing top
for Better Visibility
Change Display Mode
Press I
(uppercase i
) to toggle between cumulative and per-core CPU usage.
Adjust Update Interval
Want more frequent updates? Press d
while top
is running and enter a lower number (e.g., 1
second).
Sort Processes by CPU Usage
Press Shift + P
to sort by CPU consumption.
Kill a High-Usage Process
If a process is consuming too many resources, you can terminate it from top
. Press k
, enter the PID, and confirm.
Key Takeaways
- Seeing CPU usage over 100% is normal. It means the process is using multiple CPU cores.
- Use
top
to monitor CPU usage. Press1
to view per-core usage. - Run
nproc --all
to check your core count. - Use
stress
to simulate high CPU workloads. - Optimize monitoring with
top
shortcuts.
Understanding CPU usage is essential for system performance monitoring. Now, the next time you see CPU usage above 100%, you’ll know exactly what’s happening!