Aid*_*yan 44 windows memory svchost service
任务管理器显示 svchost.exe 的整体内存使用情况。有没有办法查看单个服务的内存使用情况?
请注意,这类似于svchost.exe 上的细粒度性能报告
Pet*_*sen 52
有一种简单的方法可以获取您所要求的信息(但它确实需要对您的系统稍作改动):
拆分每个服务以在其自己的 SVCHOST.EXE 进程中运行,并且在任务管理器或进程资源管理器中可以轻松看到消耗 CPU 周期的服务(“=”后面的空格是必需的):
SC Config Servicename Type= own
Run Code Online (Sandbox Code Playgroud)
在命令行窗口中执行此操作或将其放入 BAT 脚本中。需要管理权限,并且需要重新启动计算机才能生效。
可以通过以下方式恢复原始状态:
SC Config Servicename Type= share
Run Code Online (Sandbox Code Playgroud)
示例:使 Windows Management Instrumentation 在单独的 SVCHOST.EXE 中运行:
SC Config winmgmt Type= own
Run Code Online (Sandbox Code Playgroud)
这种技术没有不良影响,只是可能会略微增加内存消耗。除了观察每个服务的 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.
Run Code Online (Sandbox Code Playgroud)
spl*_*tne 20
您可以使用内置tasklist
命令并按服务名称(/fi
开关)过滤,例如:
tasklist /fi "services eq TermService"
Run Code Online (Sandbox Code Playgroud)
输出:
Image Name PID Session Name Session# Mem Usage ==================================================== ====================== svchost.exe 2940 控制台 0 7.096 K
如果您不知道名称,可以通过运行以下语句列出它们:
tasklist /svc /fi "imagename eq svchost.exe"
Run Code Online (Sandbox Code Playgroud)
它列出了 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、事件系统、helpvc、 lanmanserver, lanmanworkstation, Messenger, Netman, Nla, RasMan, Schedule, selogon, 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
. 它将显示所有服务。
小智 10
进程资源管理器确实会在 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 实现)的内存使用情况。
虽然 Process Monitor 是一个通用实用程序(它可以为您做除洗碗外的所有事情),但对于这个特定问题,您想使用 VMMap(另一个 SysInternals 实用程序)
https://docs.microsoft.com/sysinternals/downloads/vmmap
VMMap 是一个进程虚拟和物理内存分析实用程序。它显示了进程已提交的虚拟内存类型以及操作系统分配给这些类型的物理内存(工作集)数量的细分。除了内存使用的图形表示外,VMMap 还显示摘要信息和详细的进程内存映射。强大的过滤和刷新功能使您能够识别进程内存使用的来源和应用程序功能的内存成本。
除了用于分析实时进程的灵活视图之外,VMMap 还支持以多种形式导出数据,包括保留所有信息以便您可以重新加载的本机格式。它还包括启用脚本方案的命令行选项。