Start here. This is the direct spoken answer to practice first.
Overview
A Spring service can have several independent thread pools; diagnosis starts by identifying which queue and workers are constrained.
I identify the saturated resource first: the embedded server's request threads, an application TaskExecutor, a scheduler, or a client pool. I compare active workers, queue depth, task wait time, rejected tasks, throughput, and latency. A thread dump then shows whether workers are doing CPU work, blocked on locks, waiting on downstream I/O, or synchronously waiting for other tasks.