الملفات
SRE-final-project/q2-postmortem/postmortem-report.md

2.9 KiB

Incident Post-mortem: API Service OOMKilled Outage

1. Summary

  • Date & Time: [Insert Date]
  • Duration: 45 minutes
  • Impact: API service was completely unavailable for users, resulting in a 100% error rate (502 Bad Gateway / 503 Service Unavailable) during the incident window.
  • Root Cause: Container memory limit was exceeded, causing the Kubernetes/Cloud orchestrator to continuously terminate the pod with an OOMKilled status.

2. Timeline (UTC)

  • 10:00 AM: Monitoring alerts triggered for high error rates on the /health endpoint.
  • 10:05 AM: On-call engineer acknowledged the alert and started investigation.
  • 10:15 AM: Engineer identified that the container was crash-looping with OOMKilled exit code 137.
  • 10:25 AM: A temporary mitigation was applied by manually increasing the container memory limit from 512MB to 1024MB.
  • 10:35 AM: Service stabilized. Containers remained running without restarts.
  • 10:45 AM: Incident marked resolved after 10 minutes of stable metrics.

3. Root Cause Analysis (The "5 Whys")

  1. Why did the service go down? The container was repeatedly killed by the orchestrator.
  2. Why was it killed? The orchestrator issued an OOMKilled (Out Of Memory) signal.
  3. Why did it run out of memory? The application consumed more memory than its allocated limit (512MB).
  4. Why did it consume so much memory? An unexpected spike in requests (or a memory leak in a newly deployed feature) caused the application stack to load massive objects into memory simultaneously.
  5. Why wasn't this caught or handled? The auto-scaling policy was based solely on CPU, so it didn't spin up new instances to distribute the memory load.

4. Recommendations & Action Items

  • Immediate: Keep the memory limit at 1024MB until a thorough memory profiling is completed.
  • Short-term: Implement a memory-based auto-scaling rule (Scale out when Memory > 70%).
  • Medium-term: Setup early-detection alerts for memory utilization reaching 80% to warn the team before an OOMKilled event occurs.
  • Long-term: Profile the application to identify memory bottlenecks or leaks.

5. Auto-Scaling Policy

To prevent repeating this incident, the platform's auto-scaling group must be configured as follows:

  • Scale-Out Policy: Add 1 container instance when Average Container Memory > 70% for 2 minutes.
  • Scale-In Policy: Remove 1 container instance when Average Container Memory < 40% for 5 minutes.
  • CPU Backup Policy: Scale out if Average CPU > 75% for 2 minutes.

6. Early Detection

To detect this issue before the container crashes:

  • Configure alerts on the metric container_memory_usage_bytes (or equivalent).
  • Warning Alert: Container Memory > 80% (Sustained for > 3 minutes) - triggers Slack/Teams notification.
  • Critical Alert: Container Memory > 90% (Sustained for > 2 minutes) - triggers PagerDuty to wake up on-call engineer for immediate manual mitigation.