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

aeo*_*eon 19 windows-services process windows-7 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. 现在我有了我的列表,这里开始了棘手的部分......我想做下面两个选项中的一个

选项1: 如何识别这12个服务中哪一个占用了这么多CPU?我是否可以获得有关此svchost流程的扩展信息,该流程为我提供了有关此流程中托管的"每个服务"的详细信息,我现在在流程基础上提供了哪些信息?

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

如果有更好的选择如何调查,缩小这个问题的根本原因,请告诉我.

aeo*_*eon 24

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

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

选项1的解决方案:

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

选项2的解决方案:

sc config <service name> type= own
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅http://blogs.technet.com/b/askperf/archive/2008/01/11/getting-started-with-svchost-exe-troubleshooting.aspx.

  • 非常有帮助,谢谢.根据TechNet博客文章,要将其更改回共享进程,请运行`sc config <service name> type = share`. (4认同)

小智 5

  1. 启动资源监视器

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

  3. 在您要调查的过程中选中一个复选标记(我按平均CPU排序)

  4. 服务将按您标记的流程进行筛选,并显示该流程中运行的每个服务的CPU统计信息.

  • 在非英语Windows上:_W + r_`perfmon/res` (3认同)