피드로 돌아가기
Hacker NewsInfrastructure
원문 읽기
Average CPU의 함정과 CFS Throttling으로 인한 p99 Latency 폭증 해결
We should get rid of average CPU utilization
AI 요약
Context
평균 CPU 사용량 기반의 모니터링 체계가 Container의 Burst Workload를 감지하지 못하는 한계 노출. Linux Kernel의 CFS(Completely Fair Scheduler) Quota 메커니즘으로 인해 평균 CPU 수치는 낮으나 실제 프로세스는 Throttling되는 현상 발생.
Technical Solution
- CPU Limit을 '코어 개수'가 아닌 100ms 주기당 '시간 예산(Time Budget)'으로 해석하는 관점 전환
- Multi-core 환경에서 단일 요청이 가용 코어를 모두 사용하여 짧은 시간 내에 Budget을 소진하는 Burst 패턴 분석
- Budget 소진 후 다음 스케줄링 주기까지 프로세스가 강제 정지되는 Throttling 메커니즘 파악
- Go 1.25의 GOMAXPROCS cgroup-aware 설정을 통한 Thread 수 최적화로 Starvation 리스크 감소
- 단순 사용량 지표 대신
cpu.stat의nr_throttled및throttled_usec를 통한 실제 정지 시간 측정 - Kernel PSI(Pressure Stall Information) 및 Hypervisor Steal Time을 결합한 다각적 포화도 분석
실천 포인트
1. Kubernetes Pod의 Resource Limit 설정 시 `cpu.stat` 내 `nr_throttled` 지표 모니터링 추가
2. p99 Latency가 튀는 경우 Average CPU 대신 Kernel PSI(`cpu.pressure`) 확인
3. Go 애플리케이션의 경우 GOMAXPROCS 설정이 cgroup limit과 일치하는지 검토
4. 인프라 팀과 CPU 증설 협의 시 평균 사용량이 아닌 Throttling 발생 빈도 데이터를 근거로 제시