我的一个应用程序有问题。我运行该应用程序,一切正常。当我关闭该应用程序时,我注意到系统中的一个“svchost”进程占用了大约95-100%的CPU,因此我必须弄清楚什么占用了这么多的CPU周期。

我为自己设定了非常简单明了的目标:

  • 获取进程信息或占用大量CPU的特定“svchost”
  • 我知道svchost进程的用途是什么,因此我省去了为我解释的精力。因此,现在我必须知道此流氓svchost加载了哪些模块。
  • 我运行了我的应用程序,将其关闭,并确保我的进程已完全关闭,而不是内存中。然后,我得到了svchost的PID,占用了100%CPU
  • 我从sysinternals运行了ProcessExplorer,获得了有关此svchost托管了多少以及提供哪些服务的信息。它们大约有12种服务。我不会担心此列表,因为我更关心如何识别这12个服务中的哪一个正在占用CPU周期。
  • 现在我有了列表,这里开始了棘手的部分...我想在
  • 下面的2个选项中做一个

    选项1:
    如何确定这12个服务中的哪一个占用了太多CPU?我可以获取此svchost进程的扩展信息,该信息以该进程中托管的“每项服务”为基础,向我提供详细信息,以我现在拥有的进程为基础吗?

    选项2:
    是否可以将Windows配置为使svchost每个svchost实例仅运行一项服务?

    如果在调查方法上有更好的选择,请缩小此问题的根本原因,请告诉我。

    最佳答案

    我已经回答了我的问题,但是在评论中提出了问题。我现在将其添加为答案,因此众所周知。

    我想出了上述问题的两种选择方法:

    选项1的解决方案:

    打开资源监视器(resmon.exe),转到“CPU”选项卡,在“图像”选项卡下检查svchost.exe(带有要监视的PID),转到“服务”框,并检查不同服务的CPU使用率。

    选项2的解决方案:

    sc config <service name> type= own
    

    或将注册表HKLM\System\CurrentControlSet\Services\<ServiceName>\Type更改为0x10。

    有关更多信息,请引用http://blogs.technet.com/b/askperf/archive/2008/01/11/getting-started-with-svchost-exe-troubleshooting.aspx

    09-28 14:16