Thread pool exhaustion
currentThreadsBusy reaches maxThreads (default 200) and every worker is occupied. The NIO poller keeps accepting connections up to maxConnections while requests queue for a free thread, then time out. The JVM is healthy and CPU is often low — the app just is not being served. It is almost always a slow or hung backend, not Tomcat. Take a thread dump before any restart; the threads re-accumulate until the backend is fixed.
- currentThreadsBusy at or equal to maxThreads (default 200)
- Requests queuing then timing out while CPU sits near idle
- jstack shows http-nio-exec threads blocked in socketRead0 or connection acquire
- A restart clears it, then it returns within minutes






