Answers:
有一种简单的方法来获取您要的信息(但是确实需要对系统进行一些更改):
将每个服务拆分为在其自己的SVCHOST.EXE进程中运行,并且消耗CPU周期的服务将在任务管理器或进程资源管理器中轻松显示(“ =“之后的空格是必需的)):
SC Config Servicename Type= own
在命令行窗口中执行此操作,或将其放入BAT脚本中。需要具有管理特权,并且必须重新启动计算机才能生效。
可以通过以下方式恢复原始状态:
SC Config Servicename Type= share
示例:使Windows Management Instrumentation在单独的SVCHOST.EXE中运行:
SC Config winmgmt Type= own
该技术没有不良影响,只是可能会稍微增加内存消耗。而且,除了观察每个服务的CPU使用率之外,还可以轻松观察每个服务的页面错误增量,磁盘I / O读取速率和磁盘I / O写入速率。对于“进程资源管理器”,分别在菜单“查看/选择列”中:“进程内存/页面错误增量”选项卡,“进程性能/ IO增量写字节数”选项卡,“进程性能/ IO增量读字节”选项卡。
在大多数系统上,只有一个SVCHOST.EXE进程具有很多服务。我使用了以下顺序(可以将其直接粘贴到命令行窗口中):
rem 1. "Automatic Updates"
SC Config wuauserv Type= own
rem 2. "COM+ Event System"
SC Config EventSystem Type= own
rem 3. "Computer Browser"
SC Config Browser Type= own
rem 4. "Cryptographic Services"
SC Config CryptSvc Type= own
rem 5. "Distributed Link Tracking"
SC Config TrkWks Type= own
rem 6. "Help and Support"
SC Config helpsvc Type= own
rem 7. "Logical Disk Manager"
SC Config dmserver Type= own
rem 8. "Network Connections"
SC Config Netman Type= own
rem 9. "Network Location Awareness"
SC Config NLA Type= own
rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own
rem 11. "Secondary Logon"
SC Config seclogon Type= own
rem 12. "Server"
SC Config lanmanserver Type= own
rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own
rem 14. "System Event Notification"
SC Config SENS Type= own
rem 15. "System Restore Service"
SC Config srservice Type= own
rem 16. "Task Scheduler"
SC Config Schedule Type= own
rem 17. "Telephony"
SC Config TapiSrv Type= own
rem 18. "Terminal Services"
SC Config TermService Type= own
rem 19. "Themes"
SC Config Themes Type= own
rem 20. "Windows Audio"
SC Config AudioSrv Type= own
rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own
rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own
rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own
rem 24. "Workstation"
SC Config lanmanworkstation Type= own
rem End.
svchost.exe
在Windows XP系统上注意到3或4个实例。在这一个我看到6
type= own
可能无法正常工作,并且您将无法访问使用此文件加密的任何文件(如果OS文件经过加密,将是灾难性的!)
您可以使用内置tasklist
命令并按服务名称(/fi
开关)进行过滤,例如:
tasklist /fi "services eq TermService"
输出:
映像名称PID会话名称会话#内存使用情况 ================================================== ====================== svchost.exe 2940控制台0 7.096 K
如果您不知道名字,可以通过运行以下语句列出它们:
tasklist /svc /fi "imagename eq svchost.exe"
它列出了svchost.exe托管的所有服务,例如:
图像名称PID服务 ================================================== ========================== svchost.exe 632 DcomLaunch svchost.exe 684 RpcSs svchost.exe 748 Dhcp,Dnscache svchost.exe 788 LmHosts,W32Time svchost.exe 804 AeLookupSvc,AudioSrv,浏览器,CryptSvc, dmserver,EventSystem,helpsvc, lanmanserver,lanmanworkstation,Messenger, Netman,Nla,RasMan,Schedule,seclogon, SENS,ShellHWDetection,TrkWks,winmgmt, wuauserv,WZCSVC svchost.exe 1140 ERSvc svchost.exe 1712 RemoteRegistry svchost.exe 196 W3SVC svchost.exe 2940 TermService svchost.exe 2420 TapiSrv
服务不一定由托管svchost.exe
。因此,如果找不到按执行文件名过滤的服务,请运行tasklist /svc
。它将显示所有服务。
进程资源管理器确实会向您显示svchost中的各个内存使用情况。确保从此处获得最新版本http://technet.microsoft.com/zh-cn/sysinternals/bb896653
确保以管理员身份运行Process Explorer,单击要检查的svchost,然后单击View DLLs
按钮(或CTRL+D)。右键单击DLLs窗口中的标题Select Columns...
,然后检查WS Total Bytes
并单击OK
。
现在,您可以查看svchost中单个服务(由dll实现)的内存使用情况并对其进行排序。
尽管Process Monitor是一个通用工具(除了为您洗碗之外,它会做所有事情),但是对于此特定问题,您想使用VMMap(另一个SysInternals工具)
http://technet.microsoft.com/zh-cn/sysinternals/dd535533.aspx
VMMap是一个进程虚拟和物理内存分析实用程序。它显示了进程的已落实虚拟内存类型的细目分类,以及操作系统为这些类型分配的物理内存(工作集)的数量。除了以图形方式表示内存使用情况之外,VMMap还显示摘要信息和详细的进程内存映射。强大的过滤和刷新功能使您能够确定进程内存使用量的来源以及应用程序功能的内存成本。
除了用于分析实时过程的灵活视图之外,VMMap还支持多种形式的数据导出,包括保留所有信息的本机格式,以便您可以加载回来。它还包括启用脚本方案的命令行选项。
分离服务是正确的答案,但是sc config命令对我不起作用(2008 R2)。
不过,您可以通过注册表来执行此操作,这意味着将“ Type”参数设置为0x00000010(12月16日):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<ServiceName>\Type
请注意,尽管您选择修改哪个服务,但除了“自己的”和“共享”之外,还有一些特殊类型不应更改,例如:
之后,只需重新启动服务,您就可以在ProcessExplorer中看到它现在具有自己的svchost.exe进程。