Question: My Windows server has been peaking at 100% utilization
and I'm concerned that I have a processor bottleneck. How do I tell when I
have CPU enqueues in Windows?
Answer: 100% utilization DOES NOT
always indicate any bottleneck. It just means that the CPU is busy! You
ONLY have a CPU bottleneck when the runqueue exceeds cpu_count.
You can see ?real? enqueues on CPU resources when the runqueue (r)column
in vmstat exceeds the cpu_count parameter value, and you can also detect an
overloaded CPU when you see the ?resmgr:cpu quantum? event in a top-5 timed
event on a AWR or STATSPACK report. (only when the resource manager is being
In Windows, it's the "Processor Queue Length", and it's displayed in the system
monitor and task manager. Microsoft notes:
"Processor Queue Length (System) This is the instantaneous length of the
processor queue in units of threads. All processors use a single queue in
which threads wait for processor cycles.
After a processor is available for
a thread waiting in the processor queue, the thread can be switched onto a
processor for execution. A processor can execute only a single thread at a
time. Note that faster CPUs can handle longer queue lengths than slower
"The number of threads in the processor queue. Shows ready threads only, not
threads that are running. Even multiprocessor computers have a single queue
for processor time; thus, for multiprocessors, you need to divide this value
by the number of processors servicing the workload. A sustained processor
queue of less than two threads per processor is normally acceptable,
depending upon the workload."