我有一台带有双核奔腾处理器的Win 7 32位系统的笔记本电脑(这是2010年的笔记本电脑)。有时它可以正常工作,但通常在100%CPU负载下处于空闲状态。两个svchost.exe进程(每个50%)占用CPU。据我了解,这是一个服务主机。有什么办法找出罪魁祸首是哪种服务?
注意:即使在安全模式下,也会发生这种情况。
我有一台带有双核奔腾处理器的Win 7 32位系统的笔记本电脑(这是2010年的笔记本电脑)。有时它可以正常工作,但通常在100%CPU负载下处于空闲状态。两个svchost.exe进程(每个50%)占用CPU。据我了解,这是一个服务主机。有什么办法找出罪魁祸首是哪种服务?
注意:即使在安全模式下,也会发生这种情况。
Answers:
由于svchost.exe的一个实例承载多个系统服务,因此以下是如何将这些服务分离到各自的svchost.exe实例,以找出哪个服务占用了CPU。
程序如下:
使用任务管理器显示按CPU降序排列的所有进程,并标记消耗CPU的进程的PID
在命令提示符(cmd)中输入命令
Tasklist /svc /fi "IMAGENAME eq svchost.exe"
svchost.exe的有问题实例现在可以通过其PID找到,在右侧您将找到它们所托管的系统服务的列表
对于列表中的每个名称,在以管理员身份运行的命令提示符(cmd)中输入以下命令:(
sc config <name> type= own
请注意,“ =”和“ own”之间的空格)
重启
现在,您分离的系统服务将分别在其自己的svchost.exe实例中运行,并且可以在“任务管理器”的“进程”选项卡中看到。您可以右键单击实例,然后选择“转到服务”以直接转到该服务,或者再次使用tasklist命令。
有关更多信息,请参见Microsoft文章
SVCHOST.EXE入门疑难解答。
Process Explorer使这变得容易。我已经确认可以在64位Windows 7 Professional和64位Windows 10 Pro上使用Process Explorer v16.20。
svchost.exe
较高(甚至只是可测量/非空白)的过程CPU
。按Process
或CPU
列排序可能有助于此目的。svchost.exe
进程,然后选择Properties...
。Threads
选项卡。将显示此过程中的所有线程。CPU
列中找到一个具有高(或再次是仅可测量/非空白)值的线程。按CPU
列排序可能有助于此目的。Service
列将显示该线程在其中运行的服务的名称。如果您不熟悉服务名称...
您可以使用任务管理器。还有其他方法(命令行,甚至使用WinAPI编写一些程序),但是在这里我将不讨论它们。在继续操作之前,您的用户应具有管理权限。
在“ 进程”选项卡上:
返回“ 进程”选项卡,单击“ CPU”列标题,以便按其CPU消耗对进程进行排序(请注意,进程可能以升/降序显示-每次单击CPU都会切换顺序),单击直到2个进程出现在表格顶部。现在您可以看到他们的命令行了(我不知道,但是我感觉其中之一是netsvcs
(网络服务))以及他们的PID。
接下来,您需要将2个流程与服务进行匹配。为此,您可以:
EDIT0:更新了答案,以提供一种更简单(并使方式更有意义)的方法,而不是使用我最初发布的左手样式刮擦我的右头部。