要诊断CPU使用率问题,应使用Windows事件跟踪(ETW)捕获CPU采样数据/配置文件。
要捕获数据,请安装Windows Performance Toolkit(它是Windows SDK的一部分)。
Windows 10 WPT可以在Windows 8 / Server 2012,Windows 8.1 / Server 2012R2和Windows 10 / Server 2016上使用。如果仍然使用Windows 7,则将SDK / WPT与Build 15086一起使用。
(可以取消选择所有其他条目)
现在运行WPRUI.exe
,First Level
在“资源”下选择“ CPU使用率”,然后单击“ 开始”。
现在捕获1分钟的CPU使用率。1分钟后,点击保存。
现在,通过将CPU Usage (sampled)
图形拖放到analysis pane
和对列排序(如您在图片中看到的那样),使用Windows Performance Analyzer分析生成的ETL文件:
在WPA内,加载调试符号并展开SYSTEM进程的Stack。在此演示中,CPU使用率来自nVIDIA驱动程序。
在以下演示中,CPU使用率来自Realtek NIC驱动程序:
当您看到类似ntoskrnl.exe的呼叫时!Vi KeTrimWorkerThreadRoutine,ntoskrnl.exe!MM 验证程序 TrimMemory,ntoskrnl.exe!验证程序 KeLeaveCriticalRegion,这意味着您已启用驱动程序验证程序。这也极大地损害了性能并导致高系统使用率。禁用驱动程序验证程序并重新启动。
在此演示中,驱动程序iai2ce.sys
(英特尔串行IO GPIO控制器驱动程序)导致该驱动程序:
在此示例中,CPU使用率来自rtsuvc.sys
似乎是Realtek UVC webcam Driver
该演示展示了Bitdefender驱动程序 ignis.sys
在以下示例中,CPU使用率是由Broadcom网络驱动程序引起的 bcmwl664.sys
当您将其ntoskrnl.exe!MiZeroWorkerPages
视为原因时,就比较棘手。这意味着在再次使用内存之前将内存清零的内核功能会导致较高的CPU使用率:
没有真正的方法来检测是由哪个进程引起的,但是我知道,如果您在Chrome中启用了硬件加速,则Chrome可能会导致它。因此,如果看到此情况并使用Chrome,请关闭Chrome中的硬件加速功能。
当您看到这些ntoskrnl.exe!RtlpGenericRandomPatternWorker时,ntoskrnl.exe!RtlpTestMemoryRandomUp调用
CPU使用率来自内核以测试内存是否有问题(memtest)。此用法是通过Windows 8.1 / 10的空闲维护任务触发的。您可以使用任务计划程序禁用空闲任务。
在Windows 10中,该任务在Microsoft> Windows> MemoryDiagnostic> RunFullMemoryDiagnostic下被称为RunFullMemoryDiagnostics。
在这种情况下,CPU使用率似乎来自Windows Server 的Data Deduplication
功能(dedup.sys!DdpPostCreate
):
在此演示中,CPU使用率是由WIFI卡驱动程序引起的 athrx.sys
如果看到此消息,请搜索驱动程序更新。
在以下演示中,涉及一个citrix驱动程序:
因此,请联系您的IT以解决Citrix问题。
在此演示中,该函数usbhub.sys!UsbhPortRecycle
导致CPU使用率:
将USB2.0端口更改为1.1速度或将USB驱动器连接到其他USB 2.0端口对某些用户有所帮助。
在这种情况下,少量的SYSTEM使用来自Acronis驱动程序tdrpm251.sys
:
在此演示中,CPU使用率ntoskrnl.exe!KeAcquireSpinLockRaiseToDpc
和ntoskrnl.exe!KeReleaseSpinLock
。
因此驱动程序正在大量使用SpinLocks。禁用某些设备/驱动程序,直到看到引起故障的设备/驱动程序。
在这种情况下,CPU使用率是由驱动程序引起的 L1C62x64.sys
这是qualcomm atheros AR8171/8175 PCI-E gigabit Ethernet
司机。因此,如果您在堆栈中看到它,请更新驱动程序。
在这里,CPU使用率来自扫描主机文件(netbt.sys!DelayedScanLmHostFile)
确保您的主机文件不要太大以避免这种用法。
在这种情况下,CPU使用率来自SRTSP64.SYS
symantec。
将您使用的symantec产品更新到最新版本。
在这里,CPU使用率来自AMD GPU驱动程序(atikmdag.sys)
如果看到此消息,请访问AMD网站并获取适用于您的AMD卡的最新驱动程序。
在这里,驱动程序TMXPFlt.sys和VsapiNt.sys导致较高的CPU使用率。
从我看来,这些文件是趋势科技AV套件的一部分。更新工具或将其删除。
在此示例中,CPU使用率来自该函数 ntoskrnl.exe!MmGetPageFileInformation
此函数获取有关页面文件的信息。
例程说明:此例程返回有关当前活动的页面文件的信息。
禁用页面文件,重新启动并再次启用它,看看是否可以解决。此外,删除英特尔服务(例如,英特尔内容保护HECI服务)似乎已为用户修复了该问题。
在这里,您可以看到驱动程序Netwtw04.sys
(英特尔Wifi驱动程序)调用了该函数flushCompleteAllPendingFlushRequests
,这会导致CPU使用率很高。
因为调试符号已加载,所以使用Windows收件箱驱动程序。只有在这里,我们才能获得调试符号,以查看带有函数名称的调用堆栈flushCompleteAllPendingFlushRequests
。
在这里,您应该安装英特尔提供的最新驱动程序以进行修复。
SYSTEM使用最复杂的情况是调用堆栈中的ACPI.sys使用:
Line #, DPC/ISR, Module, Stack, Count, Process, Weight (in view) (ms), TimeStamp (s), % Weight
6, , , | |- ACPI.sys!ACPIWorkerThread, 40246, , 39.992,941063, , 4,13
7, , , | | ACPI.sys!RestartCtxtPassive, 40246, , 39.992,941063, , 4,13
8, , , | | ACPI.sys!InsertReadyQueue, 40246, , 39.992,941063, , 4,13
9, , , | | ACPI.sys!RunContext, 40246, , 39.992,941063, , 4,13
10, , , | | ntoskrnl.exe!KeReleaseSpinLock, 40246, , 39.992,941063, , 4,13
11, , , | | ntoskrnl.exe!KiDpcInterrupt, 40246, , 39.992,941063, , 4,13
12, , , | | ntoskrnl.exe!KiDispatchInterruptContinue, 40246, , 39.992,941063, , 4,13
13, , , | | ntoskrnl.exe!KxRetireDpcList, 40246, , 39.992,941063, , 4,13
14, , , | | ntoskrnl.exe!KiRetireDpcList, 40246, , 39.992,941063, , 4,13
15, , , | | |- ntoskrnl.exe!KiExecuteAllDpcs, 40198, , 39.945,173325, , 4,13
16, , , | | | |- ACPI.sys!ACPIInterruptDispatchEventDpc, 27565, , 27.408,930428, , 2,83
17, , , | | | | |- ACPI.sys!ACPIGpeEnableDisableEvents, 24525, , 24.384,921620, , 2,52
18, , , | | | | | ACPI.sys!ACPIWriteGpeEnableRegister, 24525, , 24.384,921620, , 2,52
19, , , | | | | | |- hal.dll!HalpAcpiPmRegisterWrite, 24421, , 24.281,015516, , 2,51
20, , , | | | | | | |- hal.dll!HalpAcpiPmRegisterWritePort, 24166, , 24.027,316013, , 2,48
这非常难以调试。在sysinternals主题中,我列出了一些建议:
- 确保CPU不会因为CPU风扇中的灰尘而过热
- 更新或刷新(相同的)BIOS / UEFI
- 加载默认的BIOS / UEFI设置
- 确保电池没有损坏,从笔记本计算机中取出电池或在设备管理器中禁用电池。
- 如果您已用Caddy替换了DVD / Blue-Ray Drive,则在HDD caddy上更改跳线,以便在旧HDD旁边安装SSD
在下面的演示中,igdkmd64.sys
用于Intel HD 630的.4574版本的Intel HD驱动程序导致了此问题:
解决方案是使用至少.4590的版本更新到驱动程序。
在以下情况下,SYSTEM进程的CPU使用率是由驱动程序引起的 stdriverx64.sys
这似乎是音频流驱动程序。因此,如果您在WPA中看到此软件/驱动程序,请进行更新。
如果您risdxc64.sys
在SYSTEM的调用堆栈中看到一个导致CPU使用率很高的驱动程序,请更新Ricoh PCIe SDXC / MMC主机控制器驱动程序,或者在设备管理器中禁用SD卡读取器(如果没有驱动程序更新可以解决问题)。
该SD卡读卡器似乎内置于许多Lenovo设备中。
用户@stevemidgley显示了一个新问题,即CPU使用率更高 Wdf01000.sys!FxSystemWorkItem::_WorkItemThunk
在这里,您可以看到引起它的驱动程序UDE.sys。
在符号中心
我可以看到它属于Modem驱动程序,并且跟踪显示Fibocom L850-GL
(LTE Modem)的PNP数据是可能的设备:
解决方案是在设备管理器中禁用调制解调器和USB复合设备。