去评论
海欣资源

Windows10 explorer资源管理器CPU占用过高问题的调试解决方法

cmd
2022/06/06 18:18:32
1.系统基本信息
版本:windows10专业版
版本号:21H2
操作系统内部版本:19044.1586

2.explorer高占有率现象分析
使用微软提供的工具:ProcessExplorer 查看explorer进程的栈、使用率信息(使用方法请自行百度)。
问题测试方法:
1).为了便于观察,使用快捷键windows + E 快速 打开10个资源管理器。
2).打开ProcessExplorer 查看explorer进程的栈、使用率信息。结果有如下特征:
explorer栈信息:高占有率会集中在TpReleasCleanupGroupMenber+0x450上面,而且还是周期性出现。

使用率信息:断开网络,explorer表现正常,连接网络则CPU和IO使用率非常高。

通过以上方法观察到explorer的高占有率似乎和网络有关系,但本人尝试了关闭OneDriver,windows自动更新的P2P分享设置,禁用cotana,等等网上说的一系列方法,都无法解决。

3.解决方法 ?
还是windows search的问题。但根据其他人的说法,注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search中的SetupCompletedSuccessfully要改为1即可解决问题,但本人情况下,此项值一直为1,后尝试将值修改为0后,重启explorer。很出乎意料的,问题得到了解决。(太恶心了)
电脑重启后SetupCompletedSuccessfully又会重新被自动置1,但此时explorer已经工作正常了。
!!!经过时间证明,这只是偶然,注册表修改无效。

4. 附加:CPU状态
1). 高占有率下,10个explorer的CPU表现情况:


2). 问题解决后正常的,10个explorer的CPU表现情况:

5.第一次复发
正常运行第三天后,手贱又开了几个服务,导致explorer cpu高占用问题复发。此时修改SetupCompletedSuccessfully=0并无卵用。但同时修改了:
SystemIndexNormalization = 0
UseLowPriorityConfiguration = 0
后,问题又神奇般的得到了解决。没卵用哈。
以下内容新建一个文本文件,复制即可,然后重命名为XXX.reg执行即可快速修改注册表。

  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TimeBrokerSvc]
  3. "start"=dword:00000003

  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OneDrive]
  5. "DisableFileSyncNGSC"=dword:00000001


  6. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search]
  7. "SetupCompletedSuccessfully"=dword:00000000
  8. "SystemIndexNormalization"=dword:00000000
  9. "UseLowPriorityConfiguration"=dword:00000000
前置设置如下(尝试了很多方法后的状态,不一定需要完全一致,完全一致也不一定能解决问题,参考即可。奇葩的win10BUG,讨厌死了!):

1).windows search服务是禁用状态。
2).Problem Reports Control Panel Support服务 是开启状态,其实应该影响不大,必要时可以关掉。
3).Diagnostic Policy Service、Diagnostic Service Host、Diagnostic System Host服务为禁用状态。
4).Time Broker服务为开启状态,这个关掉会导致Task Scheduler服务无法开启,影响一些软件使用。
5).组策略内关闭cortana,【允许使用cortana】【允许在锁屏界面上方使用cortana】【允许搜索和cortana使用位置】三个选项禁用即可。
6).组策略中也禁用了OneDrive的一些选项。

6.第二次复发
本人因为无意中使用了explorer的搜索功能,如下图:


然后直接触发了explorer高占用的bug。
通过观察磁盘的读写情况,只有读,而且每次只读几百字节,没有写入,这有点像是在全盘搜索遍历文件名的过程。
问题复发后,各种修改注册表,禁用服务都无效。有效的只有断网和ProcessExplorer中,suspend一个叫【shcore.dll!Ordinal】的线程(有很多,但只有一个会影响到cpu占用,某些挂起后可能会导致桌面异常,无法刷新、桌面图标无响应等等):


最后【CPU高占用问题】还是在系统运行了1个多小时后,莫名其妙的自行消失了(估计是遍历整个盘完了)。
所以windows search能不用就不用。开始菜单的搜索不会导致高占用。
!!!时间证明,这也不是问题的根本原因。

7.真·解决办法
经过时间验证,以上方法并不能彻底解决CPU高占用问题,一般重启explorer还是会复发。
某天,偶然间发现我的设备管理器页面在疯狂的自动刷新(间隔2-3s),断网后停止刷新,接通网络继续刷新,我就纳闷了这什么鬼!拔掉所有外设依旧在自动刷新。


后来,在某管上(Device Manager Keeps Refreshing Problem | Windows 10 Fix)得到启发.
首先禁用Problem Reports Control Panel Support服务。
一些可以先执行的选项:

  1. #管理员模式打开CMD输入
  2. sfc /scannow
  3. DISM /Online /Cleanup-Image /CheckHealth   #有问题则/CheckHealth 变 /RestoreHealth 修复。
  4. #以上有问题先修问题
然后(用微软官方最喜欢的回应方式调试 ----->干净启动):
1).CMD控制台输入msconfig,打开系统配置,点击服务,然后选择全部禁用。电脑重启。看资源管理器CPU高占用现象和设备管理器的疯狂刷新有没有继续存在。如果没有,那说明肯定有1个或者多个服务导致了CPU高占用的问题。如果有,哦豁,那完蛋。

2).再次打开CMD输入msconfig,打开系统配置,点击服务,然后点击制造商,按照制造商排序。然后批量启用Microsoft Corporation的服务,然后重启,直至CPU高占用问题出现。这时我的设备管理器界面也是在疯狂刷新。


3).继续打开CMD输入msconfig,打开系统配置,点击服务,然后点击制造商,按照制造商排序。然后选择性关闭Microsoft Corporation的服务,然后重启,直至CPU高占用问题消失。这时基本上可以定位到问题服务的范围。

4).将问题服务禁用,然后启用其他所有服务,重启,若CPU高占用问题没有出现则问题基本解决。若出现,则重复以上步骤继续寻找问题服务。
最终会找到1个或者多个有影响的服务。本人经过调试找到了以下3个服务,关闭后CPU高占用问题彻底消失了,目前已经平稳运行了4天了:


附上前置设置:
1).windows search服务是开启状态。可以正常搜索,不会触发资源管理器高占用。调试时可以先禁用。
2).Problem Reports Control Panel Support 服务是关闭状态。
3).Diagnostic Policy Service、Diagnostic Service Host、Diagnostic System Host服务为禁用状态。
4).Time Broker服务为开启状态,这个关掉会导致Task Scheduler服务无法开启,影响一些软件使用。
5).组策略内关闭cortana,【允许使用cortana】【允许在锁屏界面上方使用cortana】【允许搜索和cortana使用位置】三个选项禁用即可。
6).组策略中也禁用了OneDrive的一些选项。