</>
⌕
Senior #cgroup#memory#cpu#oom#limits

Giới hạn CPU và memory cho container, OOMKilled là gì?

⚡ Trả lời nhanh

Giới hạn qua cgroup: --memory đặt trần RAM (vượt thì kernel OOM kill, exit 137), --cpus hoặc --cpu-shares giới hạn CPU. Memory là giới hạn cứng, CPU bị throttle chứ không kill. Runtime như JVM, Node cần cấu hình nhận biết limit của container.

docker run -d --memory=512m --memory-swap=512m --cpus=1.5 myapp
docker inspect -f '{{.State.OOMKilled}}' myapp   # true nếu bị OOM kill
docker stats
services:
  api:
    deploy:
      resources:
        limits:   { cpus: "1.5", memory: 512M }
        reservations: { memory: 256M }
  • --memory-swap bằng --memory nghĩa là không dùng swap.
  • CPU vượt quota bị throttle làm tăng latency mà không có lỗi rõ ràng.
  • JVM cũ (trước 10 và 8u191) không nhận cgroup limit, heap tính theo RAM host; Node nên đặt --max-old-space-size dưới limit.
🃏 Ôn bằng flashcard