最近,我的一台装有 Windows 10 的笔记本电脑突然出现了问题。简而言之,我注意到风扇会在短时间内(大约 10-15 秒)加速并变得非常响,频率大约为每 5 分钟一次。在试图查明问题后,我检查了发生这种情况时的 CPU 性能,果然 CPU 使用率会在这些短时间内从 10% 左右上升到 22~25%,具体原因是服务和控制器应用程序(即 services.exe)。
在尝试在进程管理器中查找问题后,我发现该问题的地址是 !RtlUserThreadStart,据我所知,这是 Windows 中涉及线程初始化的函数。有多个这样的线程在运行,但总是有一个线程的 CPU 使用率特别高。以下是截图在其中一个峰值期间
在以下帮助下这里和这里并使用 Windows Performance Analyzer 创建了一个日志 (截屏) 就在发生此问题时,很明显,仅因为这个单一进程,使用量就会增加多少。但堆栈跟踪对我来说也相当难以理解,作为示例,我将留下一小段代码这里因为它非常长。
我不知道是什么原因造成的。但如果它有用的话:我在运行 Windows debloat 脚本后首次注意到了这一点。但我不确定这是否是原因,因为在此之前,由于许多其他进程(Windows 更新、后台运行的其他服务等),CPU 使用率会更频繁地飙升,所以也许它已经发生了,我只是没有注意到,因为它混入了其他进程中。此外,这是我见过的第一台在运行脚本后出现此问题的计算机,这让我更加怀疑。
我将非常感激任何能够帮助我解决问题的帮助,我还会添加可能需要的任何其他信息。
编辑:我做了一些更精确的测量,似乎 CPU 峰值持续了 15 到 16 秒,然后处于非活动状态 5 分钟(按时钟计算),然后再次启动。考虑到它的规律性,我认为它可能与计划任务有关,但它们似乎都不符合这种行为。此外,我从堆栈跟踪中找到了以下摘录:
- rpcrt4.dll!Invoke
|- services.exe!REnumServicesStatusExW
| services.exe!REnumServiceGroupHelp
| |- services.exe!ScGetServiceDisplayName
| | |- services.exe!ScReadAndTranslateString
| | | |- services.exe!ScReadStringIndirect
| | | | |- services.exe!ScGetInfString
| | | | | |- spinf.dll!SpInfGetIndirectString
| | | | | | spinf.dll!LoadIndirectInfString
| | | | | | |- spinf.dll!SpInfLoadInfFile
| | | | | | | |- spinf.dll!ParseNewInf
| | | | | | | | |- spinf.dll!ParseGenericLine
| | | | | | | | | |- spinf.dll!ParseValuesLine
| | | | | | | | | | |- spinf.dll!_pSpUtilsStringTableAddString
| | | | | | | | | | | |- spinf.dll!_pSpUtilsStringTableLookUpString
| | | | | | | | | | | | |- spinf.dll!_ComputeHashValue
| | | | | | | | | | | | | |- spinf.dll!pSpUtilsCharLower
| | | | | | | | | | | | | | |- KernelBase.dll!LCMapStringW
| | | | | | | | | | | | | | | |- KernelBase.dll!LCMapStringEx
| | | | | | | | | | | | | | | | |- KernelBase.dll!LCMapStringEx<itself>
接下来是权重为 0 的 KernelBase.dll!LCMapStringEx 的巨大列表。我发现这个特定的摘录很有趣,因为 services.exe 进程的几乎整个权重都出现在这几行中(5.3% 中的 5.07%),所以我猜这就是问题的核心所在。