10 Essential Linux System Monitoring Tools
If you manage Linux servers — or even just run Linux on your desktop — you’ve probably needed to figure out what’s eating your CPU, saturating your disk, or hogging your network at some point. The good news is that Linux has an incredible ecosystem of monitoring tools, most of them free and open source.
I’ve put together a roundup of ten essential system monitoring tools that every Linux user should know about. Some you’ll install and forget (they log quietly in the background), others you’ll fire up when something feels wrong. All of them will save you time when you need to diagnose a problem.
1. htop — The Classic Process Viewer
If you’ve ever used top, you’ve already met htop’s older, less colourful cousin. htop is what top should have been: colour-coded, scrollable, and mouse-friendly. You can scroll through the process list vertically and horizontally, kill processes by hitting F9, and change the sort order by clicking on column headers. It shows CPU usage per core, memory usage, and swap at the top.
sudo apt install htop
htop
Best for: Quick process inspection with an interface that doesn’t hurt to look at.
2. Glances — Everything at a Glance
Glances is the Swiss Army knife of system monitoring. It packs CPU, memory, disk I/O, network throughput, running processes, file system usage, sensor temperatures, and even Docker container stats all into a single terminal window. You can export data to CSV, JSON, or InfluxDB, and it can run as a web server (glances -w) so you can check your system from another machine.
sudo apt install glances
glances
Best for: When you want the full picture without juggling five different tools.
3. btop — Modern and Gorgeous
btop is a relative newcomer that sets a new standard for terminal monitoring tools. It’s written in C++ (so it’s fast), supports mouse input, has a GPU stats module, and includes a theme system with several built-in colour schemes. The interface is battery-meter style — you get graphical bars for CPU, memory, disk, and network, plus a process tree view that’s actually usable. It also autodetects your terminal colour palette on first run.
sudo apt install btop
btop
Best for: People who want a modern, visually polished tool — it looks fantastic on a dark terminal.
4. nmon — The Old Reliable
nmon (short for Nigel’s Monitor, after its creator Nigel Griffiths from IBM) has been around for decades and is still one of the most thorough performance tools available. It captures data for CPU, memory, network, disk, file systems, NFS, and kernel statistics — all in real time. What sets nmon apart is its ability to log everything to a file and let you replay the data later with nmon -f -s 5 -c 120 (120 samples, 5 seconds apart).
sudo apt install nmon
nmon
Best for: Long-term performance capturing and post-mortem analysis of system behaviour.
5. iotop — Who’s Hammering Your Disk?
iotop does for disk I/O what htop does for processes — it shows you which processes are reading and writing, and at what speed. By default it shows I/O per process with columns for read/write bandwidth, swap usage, and I/O priority. Hit o to filter to active processes only, or use -a to accumulate I/O since start. If your system feels slow and you suspect disk is the bottleneck, iotop will confirm it.
sudo apt install iotop
sudo iotop -o
Best for: Spotting runaway processes that are thrashing the disk.
6. iftop — Watch Your Network in Real Time
iftop displays network bandwidth usage by host and connection. Fire it up on a server and you’ll immediately see which IP addresses are talking to your machine, on which ports, and how much bandwidth they’re using. The display shows totals per host and a running total at the bottom. Use -n to skip DNS lookups (faster on busy servers) and -P to show port numbers.
sudo apt install iftop
sudo iftop
Best for: Seeing what’s using your bandwidth right now — perfect for spotting unexpected traffic spikes.
7. nethogs — Per-Process Network Usage
nethogs takes a different approach: instead of showing per-connection traffic, it groups network usage by process name. This is incredibly useful when you can see traffic on the wire but don’t know which application is generating it. It’s lightweight — no dependencies beyond libpcap — and refreshes every second by default.
sudo apt install nethogs
sudo nethogs
Best for: Finding out which application is hogging your internet connection.
8. bwm-ng — Simple Bandwidth Monitoring
bwm-ng (Bandwidth Monitor NG) is about as minimal as it gets: it shows current, average, minimum, and maximum data rates for each network interface. It’s designed to be both a quick diagnostic tool and something you can pipe into other scripts. Use bwm-ng -c 10 for ten updates then quit, or bwm-ng -u bits to show bits instead of bytes. It even supports CSV and HTML output.
sudo apt install bwm-ng
bwm-ng
Best for: Quick interface-level bandwidth checks — especially useful in scripts or monitoring pipelines.
9. vnstat — Always-On Traffic Logger
vnstat is different from the others on this list — it runs as a background daemon and quietly logs your network traffic. You don’t need to keep a terminal open. Once installed, it starts recording and you can query the data later: vnstat -m for monthly totals, vnstat -d for daily, vnstat -h for hourly, or vnstat -l for live bandwidth. It keeps a permanent database, so you can answer questions like “how much data did the server transfer last Tuesday?” weeks later.
sudo apt install vnstat
sudo systemctl enable --now vnstat
vnstat -d
Best for: Keeping a permanent record of your network usage — it logs passively without any user interaction.
10. iptraf-ng — Detailed Network Statistics
iptraf-ng is the updated version of the classic iptraf. It provides detailed TCP connection monitoring, packet and byte counts by interface, and a LAN station monitor that shows traffic per MAC address on your local network. The menu-driven interface lets you switch between views without restarting, and it can log everything to files for later inspection. It’s particularly good for Ethernet-level diagnostics.
sudo apt install iptraf-ng
sudo iptraf-ng
Best for: Deep network diagnostics — TCP connection tracking and per-MAC address monitoring.
Quick Comparison
| Tool | What It Monitors | Interface | Install Size | Background Mode |
|---|---|---|---|---|
| htop | Processes, CPU, memory | TUI (curses) | Small | No |
| Glances | Everything (CPU, disk, net, sensors, Docker) | TUI + Web | Medium (Python) | Yes (web server) |
| btop | CPU, memory, disk, network, GPU | TUI (modern) | Medium | No |
| nmon | CPU, memory, disk, network, NFS, kernel | TUI + File logs | Small | Yes (file logging) |
| iotop | Disk I/O per process | TUI (curses) | Small | No |
| iftop | Network bandwidth per connection | TUI (curses) | Small | No |
| nethogs | Network traffic per process | TUI (curses) | Small | No |
| bwm-ng | Interface bandwidth | CLI / Scriptable | Tiny | No |
| vnstat | Network traffic logger | CLI + Daemon | Small | Yes (daemon) |
| iptraf-ng | Network connections, packet counts, LAN stats | TUI (menu-based) | Small | Yes (file logging) |
Which Tool Should You Use?
If you only install one tool from this list, make it Glances — it covers CPU, memory, disk, network, and sensors in a single view, and the web mode is handy for headless servers. For day-to-day process management, I’d recommend btop over htop these days — it’s just as capable and significantly prettier. For network issues, keep nethogs and iftop in your back pocket; they answer different questions and complement each other well. And if you need a permanent traffic record, set up vnstat and forget about it — it’ll be there when you need it.
Most important: none of these tools require a GUI, which makes them perfect for headless servers, SSH-only setups, and remote troubleshooting. Learn a few of them and you’ll never be stuck wondering what your system is doing again.
Happy monitoring!