Incident response cheatsheet
A one-page reference for incident response and Linux SRE debugging. For the full mindset, roadmap, and interview scenarios, see the complete guide.
๐ Full guide: Incident Response โ- Begin with the Severity & roles card
- Then the Incident lifecycle and On-call & paging cards
- Treat the other 7 cards as lookups โ scan by card title when you need one
- Open the full guide when a card isn't enough
Severity & rolesโ
| Concept | One-liner |
|---|---|
| SEV1/2/3/4 | full outage โ major degradation โ minor/limited โ cosmetic |
| IC | owns decisions |
| Comms Lead | owns messaging |
| Scribe | owns the timeline |
| SMEs | fix โ never overlap these roles under pressure |
Incident lifecycleโ
Detect โ Triage/Declare โ Mitigate โ Resolve โ Postmortem
Comms cadence: SEV1 every 15-30min, SEV2 every 30-60min, SEV3 at milestones only.
On-call & pagingโ
- Primary paged first, Secondary is the safety net.
- Escalation policy defines the timeout chain (who/when).
- Alert routing = which service; dedup collapses noise into one incident.
Stabilize first (0-5 min)โ
- Ack the page โ stop the noise.
- Confirm real user impact (not just an alert).
- Declare severity โ don't investigate silently.
- Say out loud what you're checking next.
Process commandsโ
ps aux --sort=-%cpu | head
top # P=sort CPU, M=sort mem, k=kill
pstree -p
kill -15 PID # graceful
kill -9 PID # force
pgrep -fl java
nice -n 10 myscript.sh
renice 5 -p 1234
/proc โ real gold for SREsโ
cat /proc/<pid>/status # mem, state, threads
cat /proc/<pid>/limits # ulimits in effect
ls -la /proc/<pid>/fd # open file descriptors
cat /proc/loadavg
cat /proc/meminfo
Filesystem & diskโ
df -h # disk usage
du -sh */ | sort -h # biggest dirs
lsof +D /path # who has files open here
lsof | grep deleted # deleted-but-held disk space
Inodes exhausted โ disk full โ check df -i separately.
Follow the request pathโ
- Client โ LB โ is the LB healthy / routing correctly?
- LB โ app โ is the process alive and accepting connections?
- App โ DB/cache โ is the dependency the actual bottleneck?
- Check logs at each hop, not just the top of the stack.
Postmortemโ
- Blameless. Timestamped timeline. 5-whys root cause.
- Contributing factors listed separately from root cause.
- Action items have owners and dates โ no names attached to blame.
Runbooksโ
Write for a stressed reader at 3am: numbered steps, exact commands, explicit decision points โ not prose. If a step has a judgment call, say what to check to make it.
See: 90-Day Linux SRE Roadmap for a full ramp-up planAfter a deploy, the checkout page returns errors for about a third of users. Write down: the severity you would declare and why, who takes each of the four roles, the first four things you say or do in the stabilize-first minutes, and how often you would post updates.
Done when: the severity is justified by user impact using the cheat sheet's definitions, no one person holds two roles, your four steps cover acknowledging the page, confirming real impact, declaring severity, and saying what you will check next, and the update cadence matches the table for your severity.
This needs Docker but no Linux host, because it runs in a throwaway container. It reproduces the "deleted but still using disk space" case from the filesystem card, using
/procinstead oflsof:docker run --rm alpine sh -c '
echo data > /tmp/held.log
tail -f /tmp/held.log > /dev/null &
PID=$!
sleep 1
rm /tmp/held.log
ls -l /proc/$PID/fd | grep deleted
kill $PID'Done when: the output shows a file descriptor pointing at
/tmp/held.log (deleted), and you can say whatlsof | grep deletedwould show for the same situation and whydfandduwould disagree about that file.
Illustrative scenario. An engineer gets paged for a failing service and begins digging into logs. They know the problem is serious, but they do not declare an incident or tell anyone what they are checking.
For half an hour no one else knew there was an incident. Support could not tell customers anything, a second engineer noticed the errors and started investigating the same thing independently, and no one was keeping a timeline. When the fix landed, the postmortem had almost nothing to work from.
Stabilize first. Acknowledge the page, confirm real user impact, declare a severity so roles and comms can start, and say out loud what you are checking next. Investigating silently trades a few minutes of speed for a lot of duplicated effort and lost context.
- Give an assistant an alert's text and ask it to draft the first status update in your incident template, then edit it so it states what is known, what is not, and when the next update comes.
- Have it draft a blameless timeline from a chat export, and verify every timestamp and causal claim against the source before you publish it.
- Ask it to turn a runbook into a checklist, then test the checklist by following it in a drill instead of trusting it.