Un equipo de desarrollo enfrentó fallos inexplicables en producción: una función Go con timeout ajustado se cancelaba regularmente con errores de 'context deadline exceeded', aunque las métricas de CPU mostraban valores normales. Tras semanas de investigación, descubrieron que el problema no era el uso promedio de CPU, sino el 'throttling' del kernel Linux mediante cgroups, un mecanismo que impone límites de tiempo por período de 100ms en lugar de núcleos físicos. Cuando un contenedor tiene un límite de 2000m, puede consumir esa cantidad en cualquier núcleo del nodo, pero cuando se agota, debe esperar hasta el siguiente período. Una solicitudHTTP intensiva puede agotar el presupuesto en 50ms, forcing a solicitudes posteriores a esperar.Las herramientas estándar como 'kubectl top' muestran Utilizacióndel 40%, aparentando holgura suficiente, pero el throttling pasa desapercibido. La solución requiere consultar '/sys/fs/cgroup/cpu.stat' para ver los contadores 'nr_throttled' y 'throttled_usec'. Go 1.25 hizo GOMAXPROCS conscientes del cgroup para evitar hambre de CPU.
El throttling de cgroups: el problema que las métricas normales de CPU enmascaraban
