自从安装 Windows 10 Fall Creators Update 以来,我有一个svchost.exe
进程持续使用大约 14% 的 CPU 时间:
该svchost.exe
实例负责托管三项服务:
CPU 时间被该进程内的线程所消耗进程黑客不能归因于以下三项服务中的任何一项:
鉴于这三个服务被视为关键系统服务,很难对它们采取任何措施。这些服务无法通过 停止或禁用services.msc
,终止进程会触发错误检查 ( CRITICAL_PROCESS_DIED
)。通过设置 UI 禁用 Windows Defender 防火墙不会降低 CPU 使用率。
我没有主意了。这可能是什么原因造成的?我该如何进一步调试?有没有解决办法可以停止这些服务?
更新:经过一些调试@HelpingHand,我们已将其隔离到 Windows Defender 防火墙服务。进程监视器显示它正在不断访问注册表:
可以导出进程监视器捕获的 CSV 文件(已过滤到该进程),这里。
我仍在寻找阻止这种行为的方法。
更新 2:使用 Windows 性能分析器进行的分析表明,大部分 CPU 时间都被以下代码所消耗rpcrt4.dll
:
答案1
事实证明,这与 Internet 连接共享 (ICS) 有关。
下面,我想描述一下我是如何得出这个结论的,希望它能帮助其他有类似问题的人。
第一步是确定导致问题的服务。虽然 Windows 自己的任务管理器最近也学会了这样做,但我使用了进程黑客它也可以编辑服务的配置。
双击有问题的svchost.exe
实例并选择服务选项卡显示该进程内正在运行的服务:
svchost.exe
可以同时托管许多 Windows 服务,因此很难确定哪个服务导致了问题。虽然当有足够的 RAM 可用时,Windows 10 的最新版本通常会隔离服务,一些服务仍然共享一个进程。
就是这样的情况,识别哪个服务导致问题的最简单方法就是将它们分开。
Process Hacker 可以做到这一点。在其主窗口中服务选项卡中,我们可以配置服务是否可以共享进程:
三个可疑服务中至少有两个需要配置为自己的流程以确保它们将来分开。
显然,Windows Defender 不喜欢用户干预其服务的配置,因此为了成功更改此设置,我需要
- 授予管理员团体完全访问在该服务上,
- 禁用该服务,
- 重新启动以停止服务(不能单独停止),
- 将服务类型更改为自己的流程并重新启用该服务(将其设置为自动启动) 和
- 最后一次重新启动以应用这些更改。
除此之外,犯罪分子svchost.exe
仅托管一项服务,因此我们确实有一个嫌疑人:
为了分析防火墙服务内部的情况,我们将使用 Windows 性能记录器和 Windows 性能分析器工具,它们是Windows ADK。
我们将首先记录一些数据。当嫌疑人svchost.exe
在后台忙碌时,下载这个文件,将其添加为配置文件,像这样设置 Windows 性能记录器并开始记录:
让录音运行 30 秒左右,然后保存录音。保存后,单击在 WPA 中打开立即打开进行分析。
事情开始变得棘手了。就我而言,我需要@magicandre1981的提示才能在正确的地方找到系统活动→通用事件那里的 RPC 事件数量看上去高得可疑:
svchost.exe
深入研究后发现,Windows Defender 防火墙在服务器侧面win:Start
和win:Stop
事件:
下一步是找出是谁发送了这些 RPC 调用。通过查看客户端,发现另一个svchost.exe
实例看起来很可疑:
事实上,Process Hacker 无法检测到该进程内运行的服务,而该服务也持续导致 CPU 负载:
在这种情况下,Windows 的任务管理器成功识别了该服务:
事实上,这项服务陷入了开始状态。由于我不需要它,所以我已将其禁用,下次重启后 CPU 负载已恢复正常。
我要向@HelpingHand 和@magicandre1981 表示感谢,他们在评论中提供的帮助使这一切成为可能。
后来发现TenForums 帖子,重置 Windows Defender 防火墙可修复此问题。
答案2
其实更简单,我通过以下说明重置了 Windows 防火墙设置(特别是当 CPU 负载出现相关峰值时),并取得了成功:-
将 Windows Defender 防火墙重置为默认设置可解决该问题。
为此,请打开“设置”->“更新和安全”->“Windows Defender”->“打开 Windows Defender 安全中心”->“防火墙和网络保护”->“恢复防火墙默认设置”
希望这对其他人有帮助并且有用...似乎是一个相当普遍的问题。
答案3
就我而言,在尝试了各种不成功的修复方法(包括上述一些建议,例如重置 Windows 防火墙)后,我禁用了“诊断策略服务”,最终 CPU 占用停止了。这可能不是理想的解决方案,但它似乎不是一个关键服务。以下是禁用它的方法:
- 以管理员身份打开“系统配置”('msconfig.exe')
- 常规选项卡:选择“选择性启动”
- 服务选项卡:取消选中“诊断策略服务”
- 重新启动 Windows
谢谢Ranga Rajesh Kumar 的 YouTube 频道为我指出这个解决方案。