Bỏ qua để đến nội dung
Knowledge Hub

Tình huống: p99 checkout lên 1,2 s trong khi CPU chỉ 40% limit Trung cấp

Thời gian đọc ước tính: 1 phút

CPU limit là quota mỗi 100 ms, chia chung cho mọi thread trong container. Service Node có thể đốt hết quota trong vài mili giây hash song song rồi đứng chờ, trong khi trung bình 1 phút vẫn ghi “40%”.

  • Bốn bước: tìm đúng tín hiệu, cưỡng lại các cách sửa nhanh, sửa cho cả fleet, dựng rào chắn.
  • Gợi ý: so khoảng thời gian mỗi metric lấy trung bình với độ dài một period CFS.
  • Điểm chỉ tính lựa chọn đầu tiên ở mỗi bước. Các con số là minh hoạ.
Tình huống

p99 checkout lên 1,2 s trong khi CPU chỉ 40% limit

Bạn là on-call backend của checkout-api (NestJS, Node 24, 6 replica, mỗi container cpu: 1 và memory: 768Mi cho cả request lẫn limit). Mỗi lựa chọn đổi ngay các chỉ số bên dưới.

p99 của POST /checkout1.200 ms
CFS period bị throttle38 %
504 ở gateway (timeout 1 s)0,8 %
CPU request của checkout-api (chi phí)6 core

Bước 1/4 · Checkout chậm, dashboard yên ắng

Khuyến mãi bắt đầu lúc 20:00. p99 của POST /checkout tăng từ 180 ms lên 1,2 s, gateway trả 504 cho request quá 1 s. p99 của database vẫn phẳng ở 8 ms.

Dashboard chuẩn cho thấy mỗi Pod dùng 40% CPU limit, không restart, không OOMKilled. HPA (target 70% CPU) đứng yên. Bạn nhìn vào đâu trước?

CPU của Pod, trung bình 1 phút
~400m trên 1000m
p99 database
8 ms, không đổi
traffic
+60%, một nửa là khách vãng lai
HPA
40% / target 70%, 6 replica
$ kubectl top pod -l app=checkout-api
NAME                          CPU(cores)   MEMORY(bytes)
checkout-api-7c9d-2kq8n       412m         431Mi
checkout-api-7c9d-5wz7r       398m         428Mi
checkout-api-7c9d-9hd4m       405m         440Mi
...

Bạn làm gì?

Cơ chế, kèm demo Docker có số đo thật, nằm trong Requests và limits trong Kubernetes.