Windows – How to check what is spiking the CPU while the computer is idle

cpuperformancewindows 10

My Windows 10 laptop with an i7 and 16 GB of RAM often gets the fans going full speed when I am not using it. It is a bit slow to respond sometimes when I try to wake it up to check what is going on. Every time I try to open the Task Manager to check out the Details tab and see what is using the CPU, nothing shows up. I'm running as admin, and all tasks are showing. I am guessing the system is hiding what it is working on because it is seen as a "system" task.

What is a good tool to use that will monitor and report what is utilizing CPU? I've used ProcMon before, but I didn't find the output particularly accurate or helpful.

More importantly, how can I stop this from happening? I am quite annoyed that so much software feels the need to do things when my computer is idle. Is there something like ZoneAlarm, but for CPU?

Best Answer

Install the Windows Performance Toolkit, which is part of the Windows 10 SDK.

Run "C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPRUI.exe", select First Level and CPU and click on Start.

enter image description here

Now leave the PC idle and wait until you here the fans again. Now wait 20s and click on Save to store the trace into an ETL file.

enter image description here

Now make a double click on the ETL to load it in WPA.exe. Load the debug symbols in WPA and drag & drop the CPU usage (Sampling) graph from the left side to the analysis pane. Do a righclick on the Header of the Summary Table and activate the stack column.

Now look which process uses most CPU (Weight %) and expand the stack and look for the function names what the process does.

I assume that you see the ntoskrnl.exe!MiScrubMemoryWorker as cause.

Line #, DPC/ISR, Process, Stack Tag, Stack, Count, TimeStamp (s), % Weight
8, , , ,    |    |    |- ntoskrnl.exe!MiScrubMemoryWorker, 79667, , 12,45
9, , , ,    |    |    |    ntoskrnl.exe!MiScrubNode, 79667, , 12,45
10, , , ,   |    |    |    ntoskrnl.exe!MiScrubNodeLargePages, 79667, , 12,45
11, , , ,   |    |    |    ntoskrnl.exe!MiScrubNodeLargePageList, 79667, , 12,45
12, , , ,   |    |    |    |- ntoskrnl.exe!MiScrubPage, 79663, , 12,45
13, , , ,   |    |    |    |    |- ntoskrnl.exe!RtlScrubMemory, 79653, , 12,45
14, , , ,   |    |    |    |    |    |- ntoskrnl.exe!RtlpGenericRandomPatternWorker, 38549, , 6,02

This is a function to test the memory for errors by filling / reading some patterns (ntoskrnl.exe!RtlpGenericRandomPatternWorker).

This is by design and happens when the idle maintenance task kicks up when your device is idle.

You can disable this task in the task scheduler under Task Scheduler Task Scheduler Library->Microsoft->Windows->MemoryDiagnostic.

If this is not the cause, share the ETL (compressed as zip) on OneDrive and post a link here.

Related Question