Overview of Processor Bottlenecks

 Troubleshooting High CPU utilization can be addressed from a couple of different standpoints.  In the first instance, you might have a single process consuming CPU - essentially a runaway process.  However, what happens if there is no runaway process, and yet the CPU utilization still continues to run high, sometimes at 100% for an extended […]

 Troubleshooting High CPU utilization can be addressed from a couple of different standpoints.  In the first instance, you might have a single process consuming CPU - essentially a runaway process.  However, what happens if there is no runaway process, and yet the CPU utilization still continues to run high, sometimes at 100% for an extended period of time?  You may be experiencing a processor bottleneck instead.  Processor bottlenecks occur when the processor is so busy that it cannot respond to requests for a significant period of time.

The major indicators of a processor bottleneck are identifiable using Performance Monitor.  There are two main counters to be aware of:

Counter NameIndicatorValues to Consider
Processor (_Total) \ % Processor TimeProcessor UtilizationSustained values > 90% on a single processor machine, or > 80% on a multiprocessor machine should be investigated
System \ Processor Queue LengthCurrent Depth of the thread Scheduler Ready QueueIf the Ready threads per processor value is > 2 with some frequency this may indicate a processor bottleneck.

Interpretation of these two counters should be performed with the following considerations:

  • Processor state is sampled hundreds of times per second.  These results are accumulated over the interval for which the data is gathered.  Thus, if the interval used for data gathering is a small one, you may have skewed data
  • Applications capable of absorbing any free processor cycles (for example screen savers or web page animation controls) should be excluded from the analysis as they can cause skewed data
  • Processor Queue Length is a counter that reflects a point in time data point based on the last sample of the processor state
  • Most threads are in a voluntary Wait state for much of the time.  The remaining threads actively trying to run (a subset of the total number of existing threads) form the upper limit on the number of threads you can see in the processor queue

Full Article

Additional Resources:

Processor, Bottleneck, Optimization, Performance, CPUs, Trobuleshooting, Hardware