在 Windows 10 Fall Creators Update 之后,一个 svchost.exe 实例一直在使用 CPU 时间

fef*_*rei 10 cpu-usage svchost windows-firewall windows-10 windows-10-v1709

自从安装了 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 性能分析器的屏幕截图

fef*_*rei 11

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

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


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

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

svchost.exe (1688) 属性

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

在这种情况下,确定哪个服务导致问题的最简单方法是将它们分开。

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

MpsSvc 属性

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

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

  • 授予管理员组对该服务的完全访问权限
  • 禁用服务,
  • 重新启动以停止服务(不能单独停止),
  • 将服务类型更改为Own Process并重新启用该服务(将其设置为Auto Start)和
  • 最后一次重新启动以应用这些更改。

在那之后,有问题的svchost.exe只托管一个服务,所以我们确实有一个嫌疑人:

Windows Defender 防火墙 (MpsSvc)

为了分析防火墙服务内部发生了什么,我们将使用 Windows 性能记录器和 Windows 性能分析器工具,它们是Windows ADK 的一部分。

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

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

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

这就是事情开始变得棘手的地方。就我而言,我需要来自 @magicandre1981 的提示才能在System Activity下找到正确的位置?通用事件。在那里,RPC 事件的数量看起来非常高:

46.918 Microsoft-Windows-RPC 事件

深入研究,Windows Defender 防火墙svchost.exe服务器win:Startwin:Stop事件中出现了很多:

RPC服务器调用

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

客户端调用

实际上,Process Hacker 无法检测到在该进程内运行的服务,这也一直导致 CPU 负载:

服务组名称:netsvcs

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

Internet 连接共享 (ICS)

事实上,该服务一直停留在开始状态。我已经禁用它,因为我不需要它,并且 CPU 负载在下次重新启动后恢复正常。


我想对@HelpingHand 和@magicandre1981 表示感谢,他们在评论中的帮助使这成为可能。


正如后来在TenForums 帖子中发现的那样,重置 Windows Defender 防火墙可修复此问题。