Start here. This is the direct spoken answer to practice first.
Overview
Starvation occurs when tasks cannot obtain execution capacity even though work continues to arrive.
I look for rising request latency and queue depth while executor completion slows and workers remain blocked or occupied. Thread dumps show what workers are doing: waiting on I/O, locks, futures, or nested tasks submitted to the same saturated pool. CPU can be low because every worker is waiting, so low CPU does not rule starvation out. Pool, queue, downstream connection, and timeout metrics need to be correlated.