Svchost:如何使每个svchost.exe实例只运行一个模块?如何获得扩展的流程信息?

时间:2011-05-09 06:30:47

标签: windows-7 process windows-services process-explorer

我的某个应用程序存在问题。我运行应用程序,一切都很好。当我关闭这个应用程序时,我注意到系统中的一个“svchost”进程占用了大约95-100%的CPU,我必须弄清楚占用了多少CPU周期。

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

  1. 获取正在占用大量CPU的进程信息或此特定“svchost”
  2. 我知道svchost进程的用途是什么,所以我拯救你们努力向我解释它。所以现在我必须知道这个流氓svchost加载了哪些模块。
  3. 我运行我的应用程序,关闭它并确保我的进程完全关闭,而不是内存。然后我得到svchost的PID占用100%CPU
  4. 我运行了ProcessExplorer(来自sysinternals),获得了有关此svchost托管的服务数量和信息的信息。他们约有12项服务。我不打扰这个列表,因为我更关心 如何识别这12个服务中的哪一个占用了CPU周期。
  5. 现在我有了我的清单,这里开始了棘手的部分...我想做下面两个选项中的一个
  6. 选项1: 如何识别这12个服务中哪一个占用了这么多CPU?我是否可以获得有关此svchost流程的扩展信息,该流程为我提供了有关此流程中托管的“每个服务”的详细信息,我现在在流程基础上进行了哪些工作?

    选项2: 是否可以配置窗口使svchost每个svchost实例只运行一个服务?

    如果有更好的选择如何调查,请缩小此问题的根本原因,请告知我们。

2 个答案:

答案 0 :(得分:24)

我已回答了我的问题,但我将其置于评论之下。我现在正在添加相同的答案,因此它是众所周知的。

我想出了如何在上面的问题中做两个选项:

选项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

答案 1 :(得分:5)

  1. 启动资源监视器

    • 在资源监视器中键入开始菜单 或
    • 单击“任务管理器”中“性能”选项卡下的“资源监视器”按钮
  2. 单击资源监视器

  3. 顶部的CPU选项卡
  4. 勾选要调查的流程(按平均CPU排序)

  5. 服务将按您标记的流程进行过滤,并显示该流程中运行的每项服务的CPU统计信息。