如何诊断 svchost.exe 的 CPU 使用率异常?

如何诊断 svchost.exe 的 CPU 使用率异常?

我有一台装有双核奔腾处理器的 32 位 Win 7 系统的笔记本电脑(2010 年的笔记本电脑)。有时它工作正常,但通常它会以 100% 的 CPU 负载闲置。CPU 被两个 svchost.exe 进程占用(每个进程 50%)。据我所知,这是一个服务主机。有什么方法可以找出哪个服务是罪魁祸首?

值得注意的是:即使在安全模式下也会发生这种情况。

答案1

由于 svchost.exe 实例承载着多个系统服务,因此这里介绍如何将这些服务分离出来,每个服务都有自己的 svchost.exe 实例,以便找出哪个服务消耗了 CPU。

程序如下:

  1. 使用任务管理器显示按 CPU 降序排序的所有进程,并标记消耗 CPU 的进程的 PID

  2. 在命令提示符(cmd)中输入命令
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    在此处输入图片描述

  3. 现在可以通过 PID 找到有问题的 svchost.exe 实例,在右侧,您将找到它们托管的系统服务列表

  4. 对于列表中的每个名称,在以管理员身份运行的命令提示符(cmd)中输入以下命令:(
    sc config <name> type= own
    请注意“=”和“own”之间的空格)

  5. 重启

您分离的系统服务现在将各自在 svchost.exe 的各自实例中运行,并且可以在“任务管理器”的“进程”选项卡中看到。您可以右键单击某个实例并选择“转到服务”以直接转到该服务,或者再次使用 tasklist 命令。

有关详细信息,请参阅 Microsoft 文章
SVCHOST.EXE 故障排除入门

答案2

进程探索器让这一切变得简单。我已经确认这适用于 64 位 Windows 7 Professional 和 64 位 Windows 10 Pro 上的 Process Explorer v16.20。

  1. 提升运行 Process Explorer。
  2. 找到列svchost.exe中值较高的过程(甚至是可测量/非空白值)CPU。按ProcessCPU列排序可能有助于此。
  3. 右键单击该svchost.exe进程并选择Properties...
  4. 在进程属性窗口中,选择选项Threads卡。将显示此进程中的所有线程。
  5. 找到列中值较高的线程(或者,再次强调,只是可测量/非空白)CPU。按列排序CPU可能有助于此。Process Explorer 进程线程选项卡
  6. Service列将显示该线程正在运行的服务的名称。

如果您不熟悉该服务名称...

  1. 在进程属性窗口中,选择Services选项卡。将显示在此进程中运行的所有服务。
  2. Service将选项卡上的列与您在步骤 6 中找到的选项卡上的列Services的值进行匹配。ServiceThreadsProcess Explorer 进程“服务”选项卡
  3. Display Name列将显示服务的友好名称。所选服务的描述将显示在服务列表下方。

答案3

您可以使用任务管理器还有其他方法(命令行,或者甚至使用编写一些程序程序接口),但我不会在这里讨论它们。在继续之前,您的用户应该具有管理权限。

流程标签:

  • 查看显示所有用户的进程
  • 右键单击流程“表头”(包含列名,如图像名称PID用户名中央处理器,...),然后选择选择列...
    • 在弹出的对话框中,向下滚动并确保选中命令行, 和PID(进程标识符)然后按好的
  • 返回流程选项卡,点击中央处理器列标题,以便进程按其 CPU 消耗排序(请注意,进程可能按升序/降序显示 - 每次单击中央处理器切换顺序),单击直到 2 个进程出现在表的顶部。现在您可以看到它们的命令行(我不知道,但我感觉其中一个是netsvcs(网络服务))以及它们的 PID。

  • 接下来,您需要将 2 个流程与服务进行匹配。为此,您可以:

    • 右键单击它们然后前往服务...。这将移至服务选项卡,选择该进程中运行的所有服务(对于此选项,您不需要任何前面的步骤:))。
    • 打开服务卡入多媒体计算机双击某个服务时(仅用于检查正在运行的服务),在可执行文件的路径您可以看到应该进行匹配的命令行。
  • W10你可以从中查看你需要的确切信息资源监控(你可以从任务管理器表现选项卡)。然后您就可以中央处理器选项卡中列出了服务及其 CPU 消耗。

編輯0:更新答案以提供更简单(并且更有意义)的方法,而不是用左手挠我的右头风格一,是我最初发布的。

相关内容