Linux Troubleshooting — The Complete Guide
When a Linux box misbehaves, the same dozen problems come up again and again. This is the map: what each symptom means and the fast path to the fix.
Key takeaways
- When a Linux box misbehaves, the same dozen problems come up again and again.
- This is the map: what each symptom means and the fast path to the fix.
On this page
Linux Troubleshooting — The Complete Guide#
Most Linux firefighting comes down to the same handful of symptoms: the box is slow, the disk is full, memory is gone, a service won't start, or something is "permission denied." Each has a cause you can pin down in minutes once you know which command to reach for. This guide is the map: for each common problem it says what the symptom actually means, the command that reveals the cause, and where the full fix lives.
Before diagnosing anything specific, four commands give you the lay of the land:
uptime # load average over 1, 5, 15 minutes
free -h # memory and swap, human-readable
df -h # disk usage per filesystem
journalctl -p err -b # errors since the last boot
Those four answer "is it CPU, memory, disk, or a service?" faster than anything else.
"The box is slow"#
- High load average: load counts everything waiting to run, including processes stuck in uninterruptible I/O sleep, so high load is not always CPU. Sorting it out is in diagnosing high load average.
- High CPU: when load really is CPU, the question is which process and whether it's user, system, or iowait time. Tracked down in debugging high CPU on Linux.
- Disk I/O bottleneck: sometimes "slow" is a saturated disk, not CPU. The deeper tuning angle is in Linux performance tuning for containers and Kubernetes nodes.
"It's out of memory"#
- Find what's eating RAM: telling real usage (RSS) from cache and shared memory is where most people misread
free. Explained in find what's using your memory. - The OOM killer fired: a process got killed and you want to know why and how to prevent it. Covered in the Linux OOM killer, with the early-warning signal in memory pressure (PSI) before OOM. The container versions are Docker exit 137 and Kubernetes OOMKilled.
"The disk is full"#
- No space left on device: the classic trap is
dfshowing full whiledudisagrees, usually a deleted-but-still-open file or exhausted inodes. Both are handled in disk full when df says otherwise.
"It won't open, bind, or start"#
- Too many open files: hitting the file-descriptor limit under load, fixed with the right
ulimitand systemd settings. Walked through in fixing too many open files. - Address already in use: another process holds the port, or a stale socket lingers in TIME_WAIT. Fixed in address already in use.
- Permission denied: ownership, mode bits, ACLs, or SELinux, in that order of likelihood. Diagnosed fast in Linux permission denied, with the fundamentals in Linux file permissions explained.
- A systemd service won't start: the unit fails and you need the real error, not "failed." Read out of the logs in debugging a systemd service that won't start.
"The network is acting up"#
Connectivity, DNS, and socket-level problems get their own deep dive with packet capture in Linux network debugging with tcpdump, ss, and eBPF.
The mental model#
Almost every Linux problem sorts into one of four buckets: CPU/scheduling (load, high CPU), memory (usage, swap, OOM), storage (disk full, inodes, I/O), or a resource limit (file descriptors, ports, permissions). Naming the bucket from uptime, free, and df turns a vague "it's broken" into a short checklist. The tools rarely change from one distro to the next, which is why building these into reflexes pays off for years.
The call we'd make#
Run the four orientation commands before you touch anything, because guessing wastes more time than measuring. Learn to read load versus CPU, RSS versus cache, and df versus du, since those three distinctions explain most false alarms. Each linked guide is the fast path for one specific symptom. Linux is not mysterious once you know where it keeps the evidence: the logs, /proc, and a dozen commands tell you exactly what happened, every time.
Get the DevOps Troubleshooting Cheat Sheet
Subscribe and get our free one-page reference for the errors that eat an afternoon — CrashLoopBackOff, OOMKilled, Terraform state locks, and more — plus new guides as we publish them.
The Linux OOM Killer — Why It Fired and How to Prevent It
The kernel killed your process to save the box, and the log looks like noise until you know exactly which fields to read.
Argo CD & GitOps Best Practices in 2026: Deployments You Can Trust
A production-focused Argo CD and GitOps guide: declarative Applications and ApplicationSets, app-of-apps, sync waves and hooks, automated self-heal and prune, progressive delivery with Argo Rollouts, projects/RBAC, and secure secrets — with copy-paste examples.
More from Linux
Explore more articles in this category
ext4 vs XFS vs Btrfs: Choosing a Filesystem for a Server
The default filesystem your distro picks is not always the right one for your workload. Here is what actually differs and when each one wins.
journald Log Management: Retention, Filtering, and Forwarding
journald is the default log sink on every systemd distro, and most of it runs on defaults nobody chose. Here is how to actually control it.
DNS Troubleshooting on Linux: A Systematic Approach
\"It's always DNS\" is a joke because the failure modes are so scattered: resolver config, caching, search domains, split DNS. Here is where to actually look.
You might have missed
Evergreen posts worth revisiting.