Setting CPU and Memory Limits That Match Reality

Limits too low cause OOMKill loops. Too high waste money. How we right-sized from production metrics.

Default limits.memory: 512Mi on every deployment was a guess. Guesses caused pain.

Process

  1. Export 30 days of container_memory_working_set_bytes from Prometheus
  2. P99 memory + 25% headroom = request
  3. Limit = request × 1.5 (burst allowance)
  4. CPU request = sustained P95 usage, limit = 2× request for bursts

Example: Gateway Pod

Before (guess)After (metrics)
CPU request500m350m
CPU limit500m700m
Memory request512Mi384Mi
Memory limit512Mi576Mi

OOMKills: 14/week → 0. Cluster cost: -8% (better bin-packing).

Requests drive scheduling. Limits kill pods. Treat them differently.

kubernetes , resources , limits · Kubernetes

More in Kubernetes