Common Failure Modes & Root Cause Analysis
Cloud Troubleshooting & Support
Chapter 5 · Common Failure Modes & Root Cause Analysis
Chapter 4 covered investigation technique. This chapter catalogs the actual failure patterns a support engineer will run into repeatedly — recognizing a familiar pattern is genuinely faster than diagnosing every incident entirely from first principles.
Why a Catalog of Common Failures Is Worth Having
This isn't an exhaustive list — it's the failure modes common enough to be worth having pre-loaded, directly echoing Chapter 4's "keep a go-to query library" habit: this is the analogous library, but for recognizing failure patterns rather than writing queries.
Instance Failures
- Hardware failure — rare but real; the underlying host has an issue, sometimes surfaced in advance via provider-initiated retirement notices.
- OS-level crashes/kernel panics — often visible in system logs beforehand, if caught in time.
- Out-of-memory (OOM) kills — the OS killing a process to free memory, a genuinely common and diagnosable pattern via specific log signatures.
- Health-check-triggered replacement (
cloud1-3/cloud1-5) — the instance may look like it failed when the health check itself was actually misconfigured (checking the wrong port or path) — a real, common false positive worth naming explicitly.
Storage Throttling
Revisiting cloud1-4: managed storage volumes typically have IOPS/throughput limits tied to volume size or type. A workload exceeding those limits gets throttled, not failed outright — performance degrades rather than producing an obvious error, which is genuinely confusing since nothing "broke" in the usual sense. The symptom pattern: increased latency correlating with high disk I/O metrics specifically, not CPU. The fix is usually resizing the volume or moving to a higher-performance storage tier — not debugging application code.
Database Connection Exhaustion
Revisiting cloud1-7 as a diagnosable pattern: "too many connections" errors appearing suddenly under load, or right after a deployment that introduced a connection leak (connections not properly closed or returned to the pool). To confirm: check the database's current connection count against its configured maximum — a direct diagnostic. A genuinely common root cause worth naming specifically: a recent code deployment changing connection pooling behavior — directly tying back to Chapter 4's "what changed and when" discipline.
Auto-Scaling Misconfigurations
Revisiting cloud1-3's auto-scaling masking material, now cataloged as specific, diagnosable patterns:
- Scaling too slowly — an overly conservative trigger or cooldown period means new instances come online after the spike has already caused user-visible failures.
- Scaling on the wrong metric — scaling on CPU when the real bottleneck is memory or database connections, so adding instances never actually relieves the real constraint.
- Hitting the max instance limit —
cloud1-3's own "eventually you hit the max" gotcha, now a directly checkable diagnostic: is the current instance count sitting right at its configured maximum?
A Root Cause Analysis Framework
The 5 Whys technique: repeatedly ask "why did that happen" past the first, surface-level answer, to avoid stopping at a symptom rather than the actual root cause.
That last answer is a genuine root cause worth fixing — versus stopping at "the database was slow" and just restarting it, which fixes nothing long-term.
Distinguishing a True Root Cause From a Contributing Factor
A genuinely useful nuance: sometimes there are multiple contributing factors, not one single clean root cause. In the example above, both the connection leak (a code bug) and an undersized connection pool (a config choice) could plausibly have contributed — fixing only one might reduce frequency without eliminating the risk entirely. Worth being honest about this in a postmortem rather than declaring an artificially clean single cause.
cloud1-3's auto-scaling-masking material: the underlying problem will simply recur, likely at a worse scale, until the real root cause is found and fixed.
Hands-On Exercises
A database starts returning "too many connections" errors during a traffic spike, but the same traffic level was handled fine yesterday. Using this chapter's material, what's the most likely first thing to check, and why?
📄 View solutionExplain the difference between storage throttling and an outright storage failure — what each would look like in metrics, and why the correct fix differs between the two.
📄 View solutionApply the "5 Whys" technique to this starting symptom: "users report the website is loading images slowly." Write out a plausible chain of at least 3 "whys" leading to a genuine root cause, not just a first-level symptom.
📄 View solutionChapter 5 Quick Reference
- Instance failures — hardware, OS crashes, OOM kills, and misconfigured health checks producing false-positive "failures"
- Storage throttling — degraded performance, not an outright error; latency correlates with disk I/O, not CPU; fix is resizing/tiering, not app debugging
- Connection exhaustion — check current vs. max connections directly; a recent deployment is a common root cause (tie to Ch.4's "what changed")
- Auto-scaling misconfigurations — too slow to react, scaling on the wrong metric, or hitting the configured max
- 5 Whys — keep asking past the first symptom to find a genuine, fixable root cause
- Multiple contributing factors can coexist — don't force an artificially clean single cause in a postmortem
- Next chapter: Incident Response in the Cloud — severity triage, communication, escalation, postmortems