You see an increase in CPU utilization after you install Servers for Windows.
After you install Servers for Windows, the WMI provider process (WMIPrvSE.exe) will show an increase in CPU utilization. This increase is due to Servers for Windows querying WMI every 20 seconds for its metrics sampling cycle.
This is normal and expected behavior. The fewer resources a server has, the more pronounced the spike.
The following sections describe some calculations that contribute to the increase in CPU utilization. These examples as well as the actual transmission of data are representative and not the sole cause for the increase in CPU utilization.
- Overall CPU utilization
The Server monitor agent obtains data for CPU utilization every 20 seconds using WMI to gather the system statistics. The WMI query used via managementobjectsearcher is:
SELECT PercentPrivilegedTime,PercentUserTime,TimeStamp_Sys100NS FROM Win32_PerfRawData_PerfOS_Processor WHERE Name = '_Total'
Note: All the values returned are
ticks(100ns periods), not percentages as implied by the query names.
For each 20 second period, the agent calculates percent usage,
%CPUxfor each CPU for both System and User time using
PercentUserTime(User), and the
TimeStampaccording to this formula:
%CPUx = ((currentCPUTicks - previousCPUTicks) / (currentTimestamp - previousTimestamp)) * 100
It then uses the average System and User CPU utilization for the time period to calculate the average
% CPU usageusing this formula:
% CPU usage = ( %CPU1 + %CPU2 + %CPU3 + ... + %CPUN ) / N
Every minute the agent averages the
% CPU usagedata for the three previous 20 second periods, for both the System and User CPU, and sends it to New Relic.
It is possible that a few short term spikes on one CPU or during a few data harvest periods can lead to the average being higher than Windows or version WSM 2.x reported.
- Process CPU utilization
The Server monitor agent obtains data for Process CPU utilization every 20 seconds using the GetProcessById method to retrieve the elapsed CPU
Ticksfor each process and the DateTime.UtcNow.Ticks method for the elapsed
ticks(100ns periods) for the CPU.
Every 20 seconds the agent calculates the percentage of time used by each process using this formula:
% Usage = ((currentProcessTicks - previousProcessTicks) / (currentTotalCPUTicks - previousTotalCPUTicks)) *100
At the end of each minute, the agent averages the
% Usagefor each process for the three previous 20-second periods and sends it to New Relic.
For more help
Additional documentation resources include Processes page (details about processes by memory or CPU usage, including the top five CPU consumers for the server).