Dev.to
6/24/2026

The Node.js bug that's invisible to your monitoring
Short summary
Node.js uses a hidden libuv thread pool (default 4 threads) for CPU-heavy and blocking I/O operations like bcrypt hashing, gzip compression, and DNS lookups. When this pool becomes congested—like during concurrent login spikes or large compression jobs—requests queue invisibly with no signal in CPU, event-loop lag, or standard APM metrics. The result: rising p99 latencies while all monitoring says everything is fine, because the bottleneck lives outside the JavaScript event loop.
- •libuv thread pool (4 threads by default) is invisible to standard Node.js monitoring
- •CPU-bound ops (bcrypt, gzip, DNS) and blocking I/O compete for pool slots and can stall unrelated requests
- •Pool congestion produces latency spikes with no CPU or event-loop lag signals—a monitoring blind spot
Generated with AI, which can make mistakes.
Is this a good recommendation for you?


