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.
After counters confirm sustained CPU, I capture a short representative trace during the bad interval. A sampled CPU profile shows which call paths consume processor time, and runtime or application events can connect those paths to GC, contention, or a business operation. I avoid enabling every provider because noise and overhead can hide the signal. Then I compare the hot path with the active workload.