General Troubleshooting Methodology
1
Observe — establish ground truth before touching anything
Resist the urge to restart services immediately. Gather data first.
2
Hypothesize — form a specific, testable statement
A hypothesis is not “something is wrong with the database.” It is: “PostgreSQL is not accepting new connections because the connection pool is exhausted.” Write it down. If you cannot state it precisely, you need more observation.
3
Test — one change at a time
Change exactly one variable per test. Document what you changed, when, and what the result was. In a production incident this log is your audit trail.
4
Fix — targeted and reversible when possible
Apply the minimal fix. If you must restart a service, know why you’re doing it and what you expect to change. Document the fix and the outcome.
5
Validate and monitor
High CPU Investigation
A load average of 1.0 on a single-core machine means the CPU is fully loaded. On a 16-core machine, 1.0 means virtually idle. Always divide load average by CPU core count to get a meaningful utilisation ratio. Check
nproc or lscpu for core count.Memory Investigation
Disk Space Issues
- Find space consumers
- Deleted files still open
- Log rotation
Service Debugging with systemd
Log Analysis Patterns
OOM Killer Investigation
Network Connectivity Debugging
1
Verify local interface and address
2
Test default gateway reachability
3
Test external IP connectivity (bypassing DNS)
4
Test DNS resolution
5
Test application port specifically
6
Capture traffic if still unclear
Quick-Reference Incident Checklist
Service is down — first 5 minutes
Service is down — first 5 minutes
Application is slow — first 5 minutes
Application is slow — first 5 minutes
Related Pages
Linux Essentials
Core commands used throughout these troubleshooting workflows.
Bash Scripting
Automate repetitive diagnostic and remediation steps.
Networking
Deep-dive on network diagnostics, firewall, and DNS.
DevOps Overview
Monitoring with Prometheus/Grafana and the ELK stack.