The most accurate way of measuring cpu utilization of processes in Windows based systems

central-processing-unitperformance-monitoringprocesswindows-server-2012-r2

I have been trying to find out the best way to measure the CPU utilization of processes in a Windows Server 2012R2 system and I found out that there are many inconsistencies among the methods used to measure utilization.

Initially, I looked at to observe the CPU utilization is the task manager but it only give you a snapshot of utilization, not data over a certain period of time so I decided to use other tools such as procmon or process explorer but not any one of those two report the same numbers or even the rankings among processes.

Here are the inconsistencies:

1) Task manager "processes" tab and "details" tab shows completely different values for "%CPU utilizaton" and the ranking among those processes. For example, the processes tab shows this:

  • abc.exe %24
  • 123.exe %10
  • sdf.exe %3

whereas the "details" tab show:

  • idle %55 (this is not the odd part)
  • sdf.exe %11
  • ert.exe %9
  • abc.exe %7

2) Process Explorer CPU% shows different values compared to both Task Managers "Processes" tab and to "details" tab: I understand the values may be displayed with a delay or minor inconsistencies, but the values shown in all three places are almost completely different just like the example above.

3) Process Monitor also gives out inconsistent information about the ranking of the processes in terms of CPU utilization: Even though ProcMon does not give percentage values of processes, the ranking among those processes (in terms of CPU time)do not match either Process Explorer or Task Managers ranking.

The question in summary is: Which one of those measurements would give the most accurate representation of CPU utilization among processes and why?

Best Answer

The most accurate is Process Explorer for these reasons:

  • it shows per-process CPU utilization percentages rounded to a resolution of two decimal places by default instead of to an integer
  • it tracks the time spent servicing interrupts and DPCs and displays them separately from the Idle process (Task Manager doesn't do this)
  • it uses additional system metrics so that processes consuming small amounts of CPU can be identified and, when possible, provide a more accurate account of actual CPU consumption

PE is the detail tool to go and mentioned in Windows Sysinternals Administrator’s Reference By Mark Russinovich and Aaron Margosis as the tool to go to display the most detailed information.

Edit: The ability to track interrupts can be very useful for other tasks as well, debugging software and finding faulty drivers.