The fan spins up and you have no idea why
You sit down to compile a project or stream a video and the laptop fan sounds like a jet engine. The desktop interface lags. Mouse movements stutter. You open a terminal out of habit and type top, but the scrolling columns of numbers mean nothing. You need to know which process is eating your CPU, how much RAM is actually free, and whether a runaway background job is about to crash your session.
What the process table is actually showing you
The Linux kernel tracks every running process, its memory footprint, and its CPU time slices. These monitoring tools do not change system behavior. They read from /proc and /sys, which are virtual filesystems the kernel updates in real time. Think of it like a dashboard in a car. The speedometer does not make the car go faster. It just reads the rotation of the wheels and translates it into miles per hour. top, htop, and btop are different dashboards reading the same engine data.
The kernel divides CPU time into slices. When a process uses its slice, the scheduler moves to the next one. If every slice gets used before the next round, the system feels slow. That is what high CPU usage means. Memory works differently. Linux treats unused RAM as wasted hardware. It fills spare memory with disk caches and buffers so that frequently accessed files load instantly. When a program needs RAM, the kernel drops the cache and hands the memory over. A full memory bar does not mean your system is broken. It means Linux is doing its job.
Run free -h before you panic. The available column tells you what you can actually use. Ignore the free column. It lies by design.
Installing and launching the monitors
Fedora ships with top by default. It works on every installation, including minimal server spins. htop and btop are not in the base system. You install them with dnf. The official Fedora repositories contain both packages, so you do not need third-party sources. Remember that dnf upgrade --refresh is your normal weekly maintenance command. dnf system-upgrade is for crossing major Fedora releases. They are different commands. Do not conflate them when maintaining your monitoring stack.
Here is how to install the modern alternatives and verify they are ready to run.
sudo dnf install htop btop -y
# -y skips the confirmation prompt so the transaction proceeds automatically
# dnf resolves dependencies and pulls from the configured Fedora mirrors
htop --version
# prints the installed version to confirm the binary is in your PATH
btop --version
# verifies the second tool installed correctly before you launch it
Launching them is straightforward. top starts immediately. htop and btop open their interactive interfaces. You can filter processes, sort by different metrics, and kill runaway jobs without leaving the terminal. Both modern tools remember your last configuration in ~/.config/. The files live in your home directory, so they survive system upgrades and do not conflict with package manager updates. Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/.
Here is how to start htop with a specific sort order so you see the heaviest processes first.
htop -s PERCENT_CPU
# -s sets the initial sort column so you do not have to click through menus
# PERCENT_CPU sorts by actual CPU consumption rather than process ID
You can pass the same flag to btop using --sortby. Both tools remember your last configuration in ~/.config/. The files live in your home directory, so they survive system upgrades and do not conflict with package manager updates.
Check the config directory after your first session. The tools write preferences automatically.
Reading the output without guessing
The top section of any process monitor shows system-wide metrics. The bottom section lists individual processes. You need to read both to understand what is happening.
CPU usage breaks down into four categories. us stands for user space. That is your applications and scripts. sy stands for system space. That is kernel threads and hardware interrupts. wa stands for I/O wait. That is the CPU sitting idle because it is waiting for a slow disk or network request. id stands for idle. If wa is high, your storage subsystem is the bottleneck, not your processor.
Load average shows three numbers. They represent the average number of processes waiting for CPU time over the last one, five, and fifteen minutes. A load average of 1.0 on a single core means the CPU is fully utilized. A load average of 4.0 on a quad-core machine means the system is at capacity. A load average of 8.0 on that same machine means processes are queuing up and the system will feel sluggish.
Here is a truncated example of what top displays during a heavy compile job.
top - 14:32:01 up 4 days, 2:11, 1 user, load average: 3.82, 2.15, 1.44
Tasks: 245 total, 2 running, 243 sleeping, 0 stopped, 0 zombie
%Cpu(s): 45.2 us, 8.1 sy, 0.0 ni, 44.5 id, 2.1 wa, 0.0 hi, 0.0 si
MiB Mem : 16384.0 total, 2048.3 free, 8192.5 used, 6143.2 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 9876.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4821 fedora 20 0 2.1g 890m 45m R 98.2 5.4 0:45.22 gcc
4822 fedora 20 0 2.1g 880m 42m R 95.1 5.3 0:44.10 gcc
# ...output truncated for clarity
The load average line shows the system was heavily loaded one minute ago but is settling down. The %Cpu(s) line shows nearly half the cycles are idle. The buff/cache memory is high, which is normal. The gcc processes are consuming two cores each. This is expected behavior during compilation.
You can sort by memory, CPU, or thread count in htop and btop using the F6 key. Press Shift + F to filter by process name. Press F9 to send a SIGTERM to a misbehaving process. Press F10 or q to quit. The keybindings are printed at the bottom of the screen. Read them before you start killing things.
When things go sideways
Monitoring tools sometimes show numbers that look alarming but are completely normal. The most common trap is memory usage. Linux will use up to 90 percent of available RAM for page cache. When you run free -h or look at the memory bar in htop, it will look full. The system is not out of memory. It is caching disk reads. When an application requests RAM, the kernel drops the cache instantly. You only need to worry when the available column drops below a few hundred megabytes and swap usage starts climbing.
Another trap is CPU percentage on multi-core systems. top shows percentages relative to a single core by default. If you have an eight-core processor, top can show 800 percent usage. That is normal. htop and btop display per-core bars by default, which makes it easier to see which physical cores are hot. If you want top to show percentages relative to total CPU capacity, press I and select All.
Sometimes a process shows as D (uninterruptible sleep) in the S column. That means the process is waiting for hardware I/O and cannot be killed with SIGTERM. It will wake up when the disk or network responds. If it stays in D state for more than thirty seconds, your storage controller or filesystem driver has hung. Reboot the machine. Do not try to force kill it.
Here is how to track a specific service and watch its resource footprint in real time.
htop -p $(pgrep -d, -f "firefox")
# pgrep finds all PIDs matching the pattern and joins them with commas
# -p passes those PIDs directly to htop so only those processes appear
# this isolates the browser from the rest of the process tree
If you see [FAILED] Failed to start NetworkManager.service during boot, your network configuration probably references a missing interface name. Run journalctl -xe if a process crashes repeatedly. The x flag adds explanatory hints and the e flag jumps to the end of the log. Most sysadmins type journalctl -xeu <unit> muscle-memory style. Read the actual error before guessing.
Picking the right tool for the job
Use top when you are on a minimal server install or troubleshooting over a low-bandwidth SSH connection. Use htop when you need color-coded columns, mouse support, and a clean interface for daily desktop monitoring. Use btop when you want advanced visualizations, network graphs, and disk I/O tracking in a single terminal window. Stay on the default top if you only need to check a process list occasionally and want zero dependencies.
Trust the package manager. Manual file edits drift, snapshots stay.