我有一台装有双核奔腾处理器的 32 位 Win 7 系统的笔记本电脑(2010 年的笔记本电脑)。有时它工作正常,但通常它会以 100% 的 CPU 负载闲置。CPU 被两个 svchost.exe 进程占用(每个进程 50%)。据我所知,这是一个服务主机。有什么方法可以找出哪个服务是罪魁祸首?
值得注意的是:即使在安全模式下也会发生这种情况。
答案1
由于 svchost.exe 实例承载着多个系统服务,因此这里介绍如何将这些服务分离出来,每个服务都有自己的 svchost.exe 实例,以便找出哪个服务消耗了 CPU。
程序如下:
使用任务管理器显示按 CPU 降序排序的所有进程,并标记消耗 CPU 的进程的 PID
在命令提示符(cmd)中输入命令
Tasklist /svc /fi "IMAGENAME eq svchost.exe"
现在可以通过 PID 找到有问题的 svchost.exe 实例,在右侧,您将找到它们托管的系统服务列表
对于列表中的每个名称,在以管理员身份运行的命令提示符(cmd)中输入以下命令:(
sc config <name> type= own
请注意“=”和“own”之间的空格)重启
您分离的系统服务现在将各自在 svchost.exe 的各自实例中运行,并且可以在“任务管理器”的“进程”选项卡中看到。您可以右键单击某个实例并选择“转到服务”以直接转到该服务,或者再次使用 tasklist 命令。
有关详细信息,请参阅 Microsoft 文章
SVCHOST.EXE 故障排除入门。
答案2
进程探索器让这一切变得简单。我已经确认这适用于 64 位 Windows 7 Professional 和 64 位 Windows 10 Pro 上的 Process Explorer v16.20。
- 提升运行 Process Explorer。
- 找到列
svchost.exe
中值较高的过程(甚至是可测量/非空白值)CPU
。按Process
或CPU
列排序可能有助于此。 - 右键单击该
svchost.exe
进程并选择Properties...
。 - 在进程属性窗口中,选择选项
Threads
卡。将显示此进程中的所有线程。 - 找到列中值较高的线程(或者,再次强调,只是可测量/非空白)
CPU
。按列排序CPU
可能有助于此。 - 该
Service
列将显示该线程正在运行的服务的名称。
如果您不熟悉该服务名称...
答案3
您可以使用任务管理器还有其他方法(命令行,或者甚至使用编写一些程序程序接口),但我不会在这里讨论它们。在继续之前,您的用户应该具有管理权限。
在流程标签:
- 查看显示所有用户的进程。
- 右键单击流程“表头”(包含列名,如图像名称,PID,用户名,中央处理器,...),然后选择选择列...。
- 在弹出的对话框中,向下滚动并确保选中命令行, 和PID(进程标识符)然后按好的。
返回流程选项卡,点击中央处理器列标题,以便进程按其 CPU 消耗排序(请注意,进程可能按升序/降序显示 - 每次单击中央处理器切换顺序),单击直到 2 个进程出现在表的顶部。现在您可以看到它们的命令行(我不知道,但我感觉其中一个是
netsvcs
(网络服务))以及它们的 PID。接下来,您需要将 2 个流程与服务进行匹配。为此,您可以:
- 右键单击它们然后前往服务...。这将移至服务选项卡,选择该进程中运行的所有服务(对于此选项,您不需要任何前面的步骤:))。
- 打开服务卡入多媒体计算机双击某个服务时(仅用于检查正在运行的服务),在可执行文件的路径您可以看到应该进行匹配的命令行。
- 在W10你可以从中查看你需要的确切信息资源监控(你可以从任务管理器,表现选项卡)。然后您就可以中央处理器选项卡中列出了服务及其 CPU 消耗。
編輯0:更新答案以提供更简单(并且更有意义)的方法,而不是用左手挠我的右头风格一,是我最初发布的。