答案1
有一种简单的方法可以获取您需要的信息(但它需要对您的系统进行轻微的更改):
将每个服务拆分为在其自己的 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 写入率。对于 Process Explorer,菜单 View/Select Columns:选项卡 Process Memory/Page Fault Delta、选项卡 Process Performance/IO Delta Write Bytes、选项卡 Process Performance/IO Delta Read Bytes。
在大多数系统中,只有一个 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.
答案2
您可以使用内置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 远程注册表 svchost.exe 196 W3SVC svchost.exe 2940 术语服务 svchost.exe 2420 TapiSrv
服务不一定由 托管svchost.exe
。因此,如果您无法通过执行文件名过滤找到服务,只需运行tasklist /svc
。它将显示所有服务。
答案3
进程管理器确实会向你显示 svchost 中的单个内存使用情况,确保你拥有此处的最新版本https://docs.microsoft.com/sysinternals/downloads/process-explorer
确保以管理员身份运行 Process Explorer,单击要检查的 svchost,单击按钮View DLLs
(或CTRL+D)。右键单击 DLL 窗口中的标题,Select Columns...
然后选中WS Total Bytes
,并点击OK
。
现在您可以查看 svchost 中各个服务(由 dll 实现)的内存使用情况并进行排序。
答案4
这涉及到 stackoverflow 领域,但如果您可以获得每个线程的内存统计信息,您可能能够通过将它们与线程堆栈中列出的 dll 进行匹配,将其粗略地与各个服务 dll 关联起来。不过,对于我这个小小的系统管理员大脑来说,这太难了。