Start here: the first 60 seconds
Impact
- Question
- What is broken, for whom, and since when?
- Why it matters
- Scope, urgency, and user-facing SLI/SLO risk.
Change
- Question
- What changed just before the symptom?
- Why it matters
- Deploys, configuration, packages, traffic, dependencies.
Saturation
- Question
- CPU, memory, disk, I/O, or connections?
- Why it matters
- Find resource pressure before chasing details.
Errors
- Question
- What do logs and kernel messages say?
- Why it matters
- Turns guesses into evidence.
Dependencies
- Question
- DNS, network, storage, upstream, or downstream?
- Why it matters
- The host may be healthy while a dependency is not.
Verify
- Question
- Can you reproduce it, mitigate it, and prove recovery?
- Why it matters
- A restart is not proof that the cause is understood.
Fast system snapshot
Capture context before changing anything.
date -Is
hostname
whoami
uptime
cat /etc/os-release | head
systemctl --failed
free -h
df -hT
df -i
ps -eo pid,ppid,user,stat,%cpu,%mem,etime,cmd --sort=-%cpu | head
ip -br addr
ip route
ss -s
journalctl -p warning -n 30 --no-pager01 CPU, Load & Processes
When the server is slow
High load does not automatically mean high CPU.
Linux load average includes runnable tasks and tasks stuck in uninterruptible sleep, often related to I/O.
uptime
- What it tells you
- Load averages for 1, 5, and 15 minutes.
- Watch for
- Trend, not a CPU percentage.
top
- What it tells you
- Live CPU, tasks, memory, and process view.
- Watch for
- One hot process vs system-wide pressure.
nproc
- What it tells you
- Number of available processing units.
- Watch for
- Context for load and process CPU.
ps -eo pid,%cpu,%mem,etime,cmd --sort=-%cpu | head
- What it tells you
- Top CPU-consuming processes.
- Watch for
- Runaway process, new process, long-running offender.
vmstat 1
- What it tells you
- Run queue, CPU, paging, blocked tasks.
- Watch for
- High r, b, wa, si/so activity.
mpstat -P ALL 1
- What it tells you
- Per-CPU utilization if installed.
- Watch for
- Single-core saturation and steal time.
pidstat 1
- What it tells you
- Per-process CPU/I/O/context-switch information if installed.
- Watch for
- Which PID is creating pressure.
cat /proc/loadavg
- What it tells you
- Kernel load view.
- Watch for
- Runnable and blocked workload.
cat /proc/pressure/cpu
- What it tells you
- CPU pressure stall information when available.
- Watch for
- Sustained workload waiting for CPU.
sar -u sar -q
- What it tells you
- Historical CPU/load data when sysstat collection is enabled.
- Watch for
- What happened before you logged in.
Read the signals correctly
- High %us
- Application/user-space work is consuming CPU.
- High %sy
- Kernel/system work is elevated. Investigate syscall-heavy work, networking, drivers, or I/O paths.
- High %wa
- Supports an I/O hypothesis, but does not prove storage saturation. Correlate it with device latency, queues, blocked tasks, and I/O pressure.
- High load with low CPU
- Check blocked tasks, I/O, NFS, storage, locks, and D-state processes.
- High %st in a VM
- The hypervisor may not be giving the guest the CPU time it expects.
Process clues
ps -eo pid,ppid,user,stat,wchan:24,%cpu,%mem,etime,cmd --sort=-%cpu | head -20
ps -eo stat,pid,ppid,cmd | awk '$1 ~ /^D/'
pstree -ap <PID>
cat /proc/<PID>/status
cat /proc/<PID>/limits
lsof -p <PID>Advanced escalation
strace -f -tt -T -p <PID>02 Memory, Disk & I/O
Resource pressure that looks like "Linux is broken"
Memory
free -h
- Focus on
- Available, not just Free.
cat /proc/meminfo
- Focus on
- MemAvailable, SwapFree, Dirty, Slab.
vmstat 1
- Focus on
- Paging and sustained pressure.
swapon --show
- Focus on
- Unexpected swap use or no safety margin.
journalctl -k | grep -Ei "oom|out of memory|killed process"
- Focus on
- OOM victim process and timeline.
cat /proc/pressure/memory
- Focus on
- Sustained some/full memory pressure.
Host healthy, workload unhealthy?
A process can hit a container or cgroup resource limit even when the host still has plenty of CPU or memory.
Useful cgroup v2 evidence
cat /sys/fs/cgroup/memory.current
cat /sys/fs/cgroup/memory.max
cat /sys/fs/cgroup/memory.events
cat /sys/fs/cgroup/cpu.statExact cgroup paths depend on the workload and service manager.
- Memory limits
- OOM events
- CPU throttling
- Resource pressure isolated to the workload
Disk and filesystem
df -hT
- Investigate
- Filesystem capacity, type, and mount point.
df -i
- Investigate
- Inode exhaustion even when blocks remain.
du -xhd1 /path | sort -h
- Investigate
- Largest directories on one filesystem.
find /path -xdev -type f -size +1G -ls
- Investigate
- Large files without crossing mounts.
lsof +L1
- Investigate
- Deleted files still held open by a process.
lsblk -f
- Investigate
- Block devices, filesystems, labels, and mount relationships.
findmnt
- Investigate
- Actual mount sources, targets, and options.
iostat -xz 1
- Investigate
- Device utilization, latency, and queue behavior.
cat /proc/pressure/io
- Investigate
- Workload time stalled on I/O.
journalctl -k -b
- Investigate
- Filesystem, block-device, and kernel errors.
Filesystem nearly full
Inode exhaustion
Large files
Deleted-but-open files
Wrong, missing, or read-only mount
Device latency and queues
I/O stalls
Filesystem or block-device errors
03 Services, Logs, Boot & Permissions
When a service is down
systemd: work from state to evidence
systemctl --failed
- What it tells you
- Failed units across the system.
- Watch for
- Correlated failures or an obvious starting point.
systemctl status <unit>
- What it tells you
- Current unit state and recent log lines.
- Watch for
- Exit status, restart loop, or dependency failure.
journalctl -u <unit> -b
- What it tells you
- Unit logs from the current boot.
- Watch for
- The first error and the timeline around it.
journalctl -u <unit> --since "15 min ago"
- What it tells you
- Recent unit-specific events.
- Watch for
- What changed immediately before failure.
systemctl cat <unit>
- What it tells you
- The effective unit definition and drop-ins.
- Watch for
- Overrides, paths, users, and environment files.
systemctl show <unit>
- What it tells you
- Detailed runtime properties.
- Watch for
- Limits, result codes, dependencies, and cgroup data.
ss -lntup
- What it tells you
- Listening TCP/UDP sockets and owning processes.
- Watch for
- Wrong port, wrong bind address, or no listener.
Build a timeline, not a pile of logs
journalctl -b -p warning --no-pager
journalctl -k -b --no-pager
dmesg -T | tail -100
journalctl --since "10 minutes ago" --until "now"dmesg may require elevated privileges.
Boot and startup
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
journalctl -b -1
last -x | headWhen "permission denied" is not obvious
id
groups
namei -l /path/to/file
ls -ld /path /path/to/file
stat /path/to/file
getfacl /path/to/file
getenforce
ausearch -m AVC -ts recent
aa-status
journalctl -k --grep=apparmor
cat /proc/<PID>/limits
ls /proc/<PID>/fd | wc -lgetfaclmay not be installed.getenforceandausearchapply to SELinux systems.aa-statusapplies to AppArmor systems and may require root.
04 Network, DNS, Ports & TLS
Trace the path end to end.
A useful network investigation asks where the path breaks:
- Interface
- Route
- Name resolution
- Connection
- TLS
- Application
- Dependency
ip -br addr
- What it tells you
- Concise interface addresses and state.
ip -s link
- What it tells you
- RX/TX packet errors, drops, and interface-level problems.
ip route
- What it tells you
- Configured routing table.
ip route get <IP>
- What it tells you
- The actual interface, source, and gateway Linux would choose.
ip neigh
- What it tells you
- Neighbor/ARP state for local paths.
ss -lntup
- What it tells you
- Listening TCP/UDP sockets and their processes.
ss -s
- What it tells you
- Connection-state summary and socket pressure.
curl -v https://host
- What it tells you
- Connection, TLS, HTTP, redirects, and response details.
getent hosts <name>
- What it tells you
- System NSS resolution behavior used by many local applications.
dig <name>
- What it tells you
- Direct DNS response details.
resolvectl status
- What it tells you
- Resolver configuration and per-link DNS state.
nft list ruleset
- What it tells you
- Host firewall rules when nftables is in use.
When IP works but hostname fails
getent hosts app.example.com
cat /etc/resolv.conf
resolvectl status
dig app.example.com
getent ahosts app.example.comCheck the resolver the application actually uses.
Move from simple checks to packet evidence
curl -v --connect-timeout 5 https://host/path
nc -vz host 443
tracepath host
openssl s_client -connect host:443 -servername host </dev/null
openssl s_client -connect host:443 -servername host </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates
tcpdump -nn -i any host <IP> and port 443- Netcat may not be installed.
tcpdumprequires appropriate privilege.
Do not forget time
Clock drift can break TLS, authentication, tokens, and distributed systems.
date -Is
timedatectl status05 Symptom Map
What should I check first?
Server is slow
- First checks
- uptime, top, vmstat 1, free -h, df -hT
- Think about next
- CPU vs I/O vs memory vs dependency latency.
Load high, CPU not high
- First checks
- vmstat 1, D-state processes, iostat -xz 1
- Think about next
- Blocked I/O, NFS/storage, locks, kernel wait.
Memory disappearing
- First checks
- free -h, /proc/meminfo, ps sorted by memory, OOM logs
- Think about next
- Leak, cache growth, swap pressure, limits/cgroups.
Disk full
- First checks
- df -hT, df -i, du, lsof +L1
- Think about next
- Large files, inodes, deleted-open files, hidden mount data.
Service down
- First checks
- systemctl status, journalctl -u, ss -lntup
- Think about next
- Exit code, configuration, dependency, permissions, port conflict.
Port unreachable
- First checks
- ss -lntup, ip route get, curl/nc, firewall rules
- Think about next
- Bind address, route, ACL/security group, firewall.
IP works, name fails
- First checks
- getent hosts, resolv.conf/resolvectl, dig
- Think about next
- NSS, DNS server, search domain, stale or wrong record.
TLS failure
- First checks
- date -Is, curl -v, openssl s_client
- Think about next
- Clock, certificate chain, expiry, hostname/SNI.
Intermittent latency
- First checks
- time-correlated metrics/logs, ss, iostat, vmstat, dependency checks
- Think about next
- Saturation, retries, packet loss, GC, noisy neighbor.
Worked before deploy
- First checks
- timeline plus config/package/deploy diff
- Think about next
- Rollback or feature flag may be safer than deep live surgery.
Senior production habits
Start with user impact and blast radius.
A host metric matters because of what it means for the service.
Compare against a known-good baseline.
- Another host
- Previous period
- Previous version
- Normal traffic window
Connect infrastructure to service reliability.
If SLOs exist, connect the host symptom to the user-facing SLI and error-budget burn. Infrastructure metrics are evidence, not the final objective.
Build a timeline.
Correlate symptoms with deploys, configuration changes, package updates, traffic changes, and dependency events.
Change one thing at a time when possible.
Preserve enough evidence to learn from the incident.
Prefer reversible mitigation.
Know how you will roll back before making a risky production change.
Verify recovery from the user path and the relevant signals.
"The command succeeded" is not the same as "the service recovered."
When the usual tools are missing
Linux gives you raw evidence under /proc and /sys.
/proc/loadavg
- Evidence
- Load information
/proc/stat
- Evidence
- CPU counters
/proc/meminfo
- Evidence
- Memory counters
/proc/<PID>/status
- Evidence
- Process state and memory
/proc/<PID>/fd/
- Evidence
- Open file descriptors
/proc/pressure/{cpu,memory,io}
- Evidence
- Pressure stall information
/sys/fs/cgroup/
- Evidence
- Workload resource limits and cgroup state
/sys/class/net/
- Evidence
- Network interface device statistics
Want the printable version?
Download the complete 6-page Linux Troubleshooting Cheat Sheet and keep it beside your terminal or print it for quick reference.
- 6-page PDF
- Print-friendly
- Free for personal use
Free for personal use.
You may download and use the cheat sheet for your own troubleshooting, learning, or interview preparation.
Please do not resell, redistribute, repackage, or publish the resource as your own.
© 2026 CTRL+CHAOS