Windows 10 Fall Creators Update 之后,svchost.exe 实例不断占用 CPU 时间

Windows 10 Fall Creators Update 之后,svchost.exe 实例不断占用 CPU 时间

自从安装 Windows 10 Fall Creators Update 以来,我有一个svchost.exe进程持续使用大约 14% 的 CPU 时间:

CPU 利用率图表

svchost.exe实例负责托管三项服务:

基本过滤引擎、CoreMessaging、Windows Defender 防火墙

CPU 时间被该进程内的线程所消耗进程黑客不能归因于以下三项服务中的任何一项:

截图来自 Process Hacker

鉴于这三个服务被视为关键系统服务,很难对它们采取任何措施。这些服务无法通过 停止或禁用services.msc,终止进程会触发错误检查 ( CRITICAL_PROCESS_DIED)。通过设置 UI 禁用 Windows Defender 防火墙不会降低 CPU 使用率。

我没有主意了。这可能是什么原因造成的?我该如何进一步调试?有没有解决办法可以停止这些服务?


更新:经过一些调试@HelpingHand,我们已将其隔离到 Windows Defender 防火墙服务。进程监视器显示它正在不断访问注册表:

进程监视器的屏幕截图

可以导出进程监视器捕获的 CSV 文件(已过滤到该进程),这里

我仍在寻找阻止这种行为的方法。


更新 2:使用 Windows 性能分析器进行的分析表明,大部分 CPU 时间都被以下代码所消耗rpcrt4.dll

Windows 性能分析器的屏幕截图

答案1

事实证明,这与 Internet 连接共享 (ICS) 有关。

下面,我想描述一下我是如何得出这个结论的,希望它能帮助其他有类似问题的人。


第一步是确定导致问题的服务。虽然 Windows 自己的任务管理器最近也学会了这样做,但我使用了进程黑客它也可以编辑服务的配置。

双击有问题的svchost.exe实例并选择服务选项卡显示该进程内正在运行的服务:

svchost.exe (1688) 属性

svchost.exe可以同时托管许多 Windows 服务,因此很难确定哪个服务导致了问题。虽然当有足够的 RAM 可用时,Windows 10 的最新版本通常会隔离服务,一些服务仍然共享一个进程。

就是这样的情况,识别哪个服务导致问题的最简单方法就是将它们分开。

Process Hacker 可以做到这一点。在其主窗口中服务选项卡中,我们可以配置服务是否可以共享进程:

MpsSvc 属性

三个可疑服务中至少有两个需要配置为自己的流程以确保它们将来分开。

显然,Windows Defender 不喜欢用户干预其服务的配置,因此为了成功更改此设置,我需要

  • 授予管理员团体完全访问在该服务上,
  • 禁用该服务,
  • 重新启动以停止服务(不能单独停止),
  • 将服务类型更改为自己的流程并重新启用该服务(将其设置为自动启动) 和
  • 最后一次重新启动以应用这些更改。

除此之外,犯罪分子svchost.exe仅托管一项服务,因此我们确实有一个嫌疑人:

Windows Defender 防火墙(MpsSvc)

为了分析防火墙服务内部的情况,我们将使用 Windows 性能记录器和 Windows 性能分析器工具,它们是Windows ADK

我们将首先记录一些数据。当嫌疑人svchost.exe在后台忙碌时,下载这个文件,将其添加为配置文件,像这样设置 Windows 性能记录器并开始记录:

Windows 性能记录器:检查第一级分类和 CPU 使用率配置文件

让录音运行 30 秒左右,然后保存录音。保存后,单击在 WPA 中打开立即打开进行分析。

事情开始变得棘手了。就我而言,我需要@magicandre1981的提示才能在正确的地方找到系统活动通用事件那里的 RPC 事件数量看上去高得可疑:

46.918 Microsoft-Windows-RPC 事件

svchost.exe深入研究后发现,Windows Defender 防火墙在服务器侧面win:Startwin:Stop事件:

调用RpcServerCall

下一步是找出是谁发送了这些 RPC 调用。通过查看客户端,发现另一个svchost.exe实例看起来很可疑:

调用RpcClientCall

事实上,Process Hacker 无法检测到该进程内运行的服务,而该服务也持续导致 CPU 负载:

服务组名称:netsvcs

在这种情况下,Windows 的任务管理器成功识别了该服务:

互联网连接共享 (ICS)

事实上,这项服务陷入了开始状态。由于我不需要它,所以我已将其禁用,下次重启后 CPU 负载已恢复正常。


我要向@HelpingHand 和@magicandre1981 表示感谢,他们在评论中提供的帮助使这一切成为可能。


后来发现TenForums 帖子,重置 Windows Defender 防火墙可修复此问题。

答案2

其实更简单,我通过以下说明重置了 Windows 防火墙设置(特别是当 CPU 负载出现相关峰值时),并取得了成功:-

将 Windows Defender 防火墙重置为默认设置可解决该问题。

为此,请打开“设置”->“更新和安全”->“Windows Defender”->“打开 Windows Defender 安全中心”->“防火墙和网络保护”->“恢复防火墙默认设置”

希望这对其他人有帮助并且有用...似乎是一个相当普遍的问题。

答案3

就我而言,在尝试了各种不成功的修复方法(包括上述一些建议,例如重置 Windows 防火墙)后,我禁用了“诊断策略服务”,最终 CPU 占用停止了。这可能不是理想的解决方案,但它似乎不是一个关键服务。以下是禁用它的方法:

  1. 以管理员身份打开“系统配置”('msconfig.exe')
  2. 常规选项卡:选择“选择性启动”
  3. 服务选项卡:取消选中“诊断策略服务”
  4. 重新启动 Windows

谢谢Ranga Rajesh Kumar 的 YouTube 频道为我指出这个解决方案。

相关内容