Start here. This is the direct spoken answer to practice first.
Why this question matters
A CPU percentage confirms pressure but does not identify the code consuming it. A useful trace captures representative work and turns sampled stacks into a path that can be reproduced and changed.
I reproduce or wait for the high-CPU window, confirm the exact process and instance, and collect a short dotnet-trace session with CPU sampling enabled. I keep the duration long enough to cover representative requests without producing an unbounded file. I open the resulting trace in a compatible analyzer such as Visual Studio, PerfView, or a supported stack viewer, then inspect the CPU call tree and hot paths. Inclusive cost shows expensive call chains, while exclusive cost highlights methods doing work directly. I separate application code from runtime work such as GC, JIT, or thread scheduling, and I compare the hot stack with request, job, or deployment context before changing code.