Why 5% CPU can still mean a slow API
01 — Question
Why does a Node.js service report low CPU utilisation while p95 latency keeps climbing?
02 — Hypothesis
Latency is dominated by off-CPU time — pool wait, socket read, event loop queueing — so CPU headroom is not the constraint. Doubling vCPU should move p95 by less than 5%.
Written before the run. Not a result.
03 — Setup
Reference rig. Exact versions, dataset size, concurrency, cache state and run count are pinned and published with each result.
04 — Method
Hold offered load fixed. Vary vCPU from 2 to 8. Attribute wall time separately to on-CPU execution, pool acquire wait, database service time, and socket wait, rather than reading a single utilisation gauge.
05 — Results
Data pending
This experiment has not been run. Nothing is reported until it has.
Will report
- p50 / p95 / p99
- event loop lag
- pool acquire wait
- off-CPU time
- CPU %
What actually happened
The mechanism behind the numbers, written in plain terms — published with the results. Numbers without a mechanism are trivia.