← all cheat sheets
OPERATOR REFERENCE · GENERAL TROUBLESHOOTING

General Troubleshooting Field Guide
Method · Network · Windows · Linux · Performance

define → isolate → test → fix → verify → document — one page, OS/vendor-neutral
Scope note: this covers the diagnostic method and command-level toolkit that applies across most systems and network incidents — not a single vendor's product. Command names are current for modern Windows 10/11 + Server, and common Linux distros (systemd-based). Some commands are being phased out in favor of newer equivalents (both are listed where relevant) — items marked VERIFY depend on your specific OS version or distro.
SYMPTOM · reported problem
isolate
METHOD · theory / test / fix
confirm
RECORD · root cause / doc
01 Universal Troubleshooting Methodology
1/7

Identify the Problem

Get the exact symptom, not a paraphrase. Who's affected — one user, one site, everyone? When did it start? What changed recently (deploy, patch, config, physical move)? Reproduce it yourself if at all possible before touching anything.
2/7

Establish a Theory

Start with the obvious/common cause, not the exotic one. Question the obvious (is it plugged in, is the service running, did the cert expire). Duplicate the problem if needed, or work backward using an OSI-layer or top-down/bottom-up approach — see section 02.
3/7

Test the Theory

Change one variable at a time. If the theory is confirmed, move to a plan of action. If not, re-theorize or escalate — don't stack multiple untested changes, or you won't know which one fixed (or broke) anything.
4/7

Plan of Action

Identify the fix, its blast radius, and a rollback path before making the change. For anything outside a single low-risk device, this is where a change ticket / maintenance window belongs.
5/7

Implement the Solution

Apply the fix. If it doesn't resolve the issue or introduces a new one, escalate or re-plan rather than layering another speculative change on top.
6/7

Verify Full Functionality

Confirm the fix under the same conditions that caused the failure (same user, same site, same load), not just from your own machine. Add preventive steps if the root cause could recur elsewhere.
7/7

Document Findings

Root cause, the fix, and the outcome — in the ticket, not just in your head. See section 09 for what's actually worth recording.

Top-Down vs Bottom-Up

Top-down: start at the application layer and work down — good when most of the stack is known-good (e.g. "this one site's checkout page fails"). Bottom-up: start at physical/link layer and work up — good when the failure is broad or you suspect infrastructure (e.g. "this whole floor lost network").
÷

Divide and Conquer

Test the midpoint of the stack first (e.g. can you ping the default gateway?). A pass rules out everything below it; a fail rules out everything above it — halves the search space per test instead of walking it linearly.
02 OSI-Layer Symptom Map
LayerTypical SymptomCheck First
1 — PhysicalNo link light, port shows down, intermittent drops on one cable runCable, SFP/port, power, patch panel, link light on both ends
2 — Data LinkOne VLAN can't reach another, MAC flapping, spanning-tree blocking a portSwitch port config, VLAN assignment, trunk allowed-list, STP state
3 — NetworkCan't reach anything outside the local subnet, wrong subnet, asymmetric routingIP/mask/gateway, routing table, ping gateway then a remote host
4 — TransportHost reachable but one service isn't ("port unreachable"/timeout on that port only)Firewall/ACL/security group, service actually listening, NAT rule
5-7 — Session/Presentation/AppConnects fine but app errors, cert warning, auth failure, slow app but fast pingDNS resolution, TLS cert validity/chain, app logs, service health, auth/token expiry
03 Cross-Platform Network Toolkit
TaskWindowsLinux / macOSNotes
Reachabilityping -t hostping hostWindows pings 4x by default and stops; -t for continuous, Ctrl+C to stop
Path / hop-by-hoptracert hosttraceroute host / tracepath hostEach hop = one router; * often just means ICMP is deprioritized there, not that the hop is down
Combined ping+tracepathping hostmtr hostRuns multiple pings per hop over time — best for spotting intermittent loss a single traceroute misses
DNS lookupnslookup host
Resolve-DnsName host
dig host
host host
dig +trace walks the full resolution chain from root; add @8.8.8.8 to query a specific resolver directly
Show IP configipconfig /allip addr
ifconfig (legacy)
ifconfig is deprecated on most modern distros — prefer ip
Show routing tableroute printip route
netstat -rn
Look for a default route (0.0.0.0/0) and confirm it points where you expect
Show connections/portsnetstat -anoss -tulpnss is the modern replacement for netstat on Linux; -l = listening, -p = owning process
ARP / neighbor tablearp -aip neigh
arp -a
Duplicate MAC for one IP usually means an ARP conflict or spoofing — VERIFY before assuming malicious
Flush DNS cacheipconfig /flushdnsresolvectl flush-caches
systemd-resolve --flush-caches (older)
Exact command depends on the distro's resolver — VERIFY which is active with resolvectl status
Release/renew DHCPipconfig /release
ipconfig /renew
dhclient -r
dhclient
NetworkManager systems: nmcli con up <name> instead
Test a specific portTest-NetConnection host -Port 443nc -zv host 443Confirms TCP-level reachability without needing the actual application protocol to succeed
Wireless statusnetsh wlan show interfacesiwconfig / nmcli dev wifiCheck signal (RSSI), channel, and negotiated link speed, not just "connected"
04 DNS Troubleshooting
01

Resolution Order

Local hosts file → stub resolver cache → configured DNS server(s) → that server's own cache → recursive/root lookup if uncached. A stale answer anywhere in that chain causes "works on one machine, not another."
02

Isolate Client vs Server

dig @8.8.8.8 example.com
Querying a known-good public resolver directly bypasses your local/ISP resolver — if that works but the default lookup doesn't, the problem is your configured DNS server or cache, not the domain.
03

Trace the Full Chain

dig +trace example.com
Walks root → TLD → authoritative, showing exactly where resolution breaks (expired NS delegation, lame server, etc.) instead of just returning SERVFAIL.
SymptomLikely Cause
NXDOMAINName genuinely doesn't exist, or a typo — confirm the exact FQDN and TLD
SERVFAILAuthoritative server error, broken DNSSEC chain, or resolver can't reach anything upstream
Resolves internally but not externally (or vice versa)Split-horizon/internal DNS zone — expected behavior, not a fault, unless both are supposed to match
Works by IP but not by nameDNS-layer issue specifically — narrows the problem out of routing/firewall entirely
Intermittent resolution failuresResolver timeout/overload, flaky upstream forwarder, or TTL churn during a recent record change
Old IP still returned after a DNS changeTTL caching — check the record's TTL before assuming propagation is "stuck"; low TTLs speed up future cutovers
05 Windows Troubleshooting Essentials
EV

Event Viewer

Check System (drivers, services, hardware), Application (app crashes), and Security (auth/audit) logs. Filter by Error/Critical first, then correlate the timestamp against when the symptom started.
SC

Services

Get-Service | Where Status -ne Running
A dependent service in a failed/stopped state is a very common root cause of "the app just won't start" — check the Dependencies tab in services.msc.
SF

System File Repair

sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth
Run DISM first if SFC reports it can't repair some files — SFC pulls from the local component store, which DISM repairs from Windows Update or a mounted image.
NR

Network Stack Reset

netsh winsock reset netsh int ip reset ipconfig /flushdns
Reboot required after Winsock reset. Last-resort for corrupted stack state — try targeted fixes (driver reinstall, correct static IP, etc.) first since this touches every app's networking.
RM

Reliability Monitor

Open via perfmon /rel — a timeline of every crash, failed install, and driver fault, which is often faster for finding "what changed" than scrolling raw Event Viewer logs.
TM

Task / Resource Manager

Task Manager's Startup tab for boot-time culprits; Resource Monitor's Disk tab to find which process is actually driving 100% disk (Task Manager's own disk % can lag or mislead).
06 Linux Troubleshooting Essentials
JC

journalctl

journalctl -xe journalctl -u <service> journalctl -b
-xe jumps to the end with extra context; -u filters to one systemd unit; -b limits to the current boot (add -b -1 for the previous one, useful after an unexpected reboot).
SC

systemctl

systemctl status <service> systemctl list-units --failed
--failed is the fastest way to see everything currently broken at boot without reading a full log dump.
DM

dmesg

dmesg -T | tail -50
Kernel ring buffer — first place to check for hardware faults, OOM-killer activity, disk I/O errors, or a NIC that dropped link. -T converts timestamps to human-readable.
LG

Log Locations

Legacy syslog-style: /var/log/syslog (Debian/Ubuntu) or /var/log/messages (RHEL/CentOS). Most modern distros route these through journaldVERIFY which your distro actually uses before hunting for a flat-file log that may not exist.
DK

Disk & Space

df -h du -sh /path/* | sort -h
A full disk (especially /var or /) silently breaks logging, package installs, and databases — always check df -h early, not just when space is the suspected cause.
AU

Auth & Login History

last lastb
last shows successful logins, lastb shows failed attempts — useful for both access troubleshooting and spotting brute-force activity.
07 Performance & Resource Troubleshooting
ResourceWindowsLinuxWhat to Look For
CPUTask Manager → Details
Get-Process | sort CPU -desc
top / htopOne runaway process vs. sustained high load across many — very different root causes
MemoryTask Manager → Performance
Get-Counter '\Memory\Available MBytes'
free -h
vmstat 1
Available memory near zero + heavy swap/page-file use = real pressure, not just "high usage" (caching inflates the raw number)
Disk I/OResource Monitor → Disk tabiostat -x 1
iotop
High %util or await time, not just raw throughput — a "slow disk" complaint is often queue depth, not bandwidth
Network throughputResource Monitor → Network tabiftop / nloadSustained near-link-speed usage, or one process/host dominating — separates "link is saturated" from "app is slow for another reason"
Boot-time loadTask Manager → Startup tabsystemd-analyze blameRanks what's actually consuming boot time — faster than guessing which service to disable
08 HTTP Status Quick Reference
CodeMeaningWhere to Look
400Bad Request — malformed syntax the server won't even parseClient-side request body/headers, not the server
401Unauthorized — missing or invalid credentialsAuth token/session; check for expiry
403Forbidden — authenticated but not permittedPermissions/ACL/role, not credentials themselves
404Not Found — no resource at this pathURL/route correctness, not necessarily server health
408Request Timeout — server gave up waiting on the clientClient network latency or a client that hung mid-request
429Too Many Requests — rate limitedConfirm actual request volume before assuming the limit is misconfigured
500Internal Server Error — unhandled exception server-sideApplication/server logs, not the network path
502Bad Gateway — reverse proxy got an invalid response from upstreamThe upstream app/backend, not the proxy itself, is usually the actual fault
503Service Unavailable — server up but not ready to serve (overload, maintenance, health check failing)App health/readiness state, load balancer target health
504Gateway Timeout — reverse proxy got no response from upstream in timeUpstream latency/hang, or a proxy timeout set too low for a legitimately slow backend
09 Network Symptom → Likely Cause
SymptomLikely Cause
Destination host unreachableLocal machine has no route to that network — check its own routing table/gateway, not the remote host
Request timed outPacket sent, no reply received — could be genuinely down, or a firewall silently dropping rather than rejecting
TTL expired in transitRouting loop, or TTL too low for the actual path length
Connection refusedHost is reachable but nothing is listening on that port — service down, wrong port, or bound to the wrong interface (e.g. 127.0.0.1 only)
Connection resetSomething actively tore down the connection mid-stream — often a firewall/IPS, or the app crashing/closing the socket
High latency, 0% packet lossCongestion or a longer path (routing change, VPN, satellite/wireless hop) — not a connectivity fault
Intermittent loss, not totalFlaky physical link, duplex mismatch, oversubscribed wireless channel, or one bad hop — use continuous ping/mtr to catch the pattern rather than a single test
Works locally, fails over VPN/WANMTU/fragmentation issue is a common culprit — test with a smaller packet size before assuming routing or firewall
10 Escalation & Documentation Discipline
01

Capture Verbatim

Exact error text (screenshot or copy-paste, not paraphrased), timestamp, and the precise steps to reproduce. "It's slow" is not reproducible; "checkout page takes 12s to load for EU users since 14:02 UTC" is.
02

Scope the Blast Radius

One user, one site, one service, or everyone? Scope changes the theory entirely — "everyone" points at shared infrastructure; "one user" points at their device, account, or local network.
03

Log What Changed

Config diffs, deploy timestamps, patch history — cross-reference against when the symptom actually started. Most incidents trace back to a change, not spontaneous failure.
04

Rollback Plan Before Acting

Know how to undo a change before you make it, especially outside a single low-risk device — don't discover the rollback path only after the fix made things worse.
05

Escalate With Evidence

Hand off what you've already ruled out, not just the symptom — saves the next person from repeating your first three tests.
06

Close the Loop

Record root cause and fix in the ticket after verification, not before — "seems fixed" and "confirmed fixed" are different states and should be logged as such.
11 Common Troubleshooting Pitfalls
PitfallWhy It Costs You Time
Changing multiple variables at onceIf it works afterward, you don't know which change fixed it — and can't safely revert the unnecessary ones later
Fixing the symptom, not the causeRestarting a service that keeps crashing "solves" the outage but guarantees a repeat until the actual fault is found
Skipping reproductionActing on a secondhand description risks solving the wrong problem entirely
Assuming instead of testing"It's probably DNS" without actually checking wastes a cycle if it's wrong — test cheap theories first
No rollback planA "quick fix" that makes things worse, with no fast way back, turns a minor incident into a major one
Not verifying under real conditions"Fixed" from your own machine/account doesn't confirm it's fixed for the affected user/site/load pattern
Tunnel vision on the first theoryConfirmation bias toward the first plausible cause can burn time while the actual cause goes unchecked