Imagine a 16-CPU host reports only 35% total CPU usage, yet one API instance has severe latency spikes. That does not rule out a CPU bottleneck.
A single thread may be saturating one CPU. The service may be restricted to a small CPU set, or a container may be hitting its CPU quota and getting throttled. Host-wide averages can hide all of these cases.
A proper CPU investigation should answer:
CPU utilization measures activity. CPU saturation measures unmet demand. A CPU bottleneck exists when limited CPU service delays useful work enough to cause the observed problem.
A CPU bottleneck exists when limited CPU capacity delays useful work enough to cause the observed slowdown.
This chapter develops an effective-capacity CPU investigation, covering utilization, saturation, pressure, per-process and per-thread ownership, context switching, quotas, throttling, affinity, virtualization, and time-correlated evidence.