2013-02-14 127 views
3

上,您可以看到拉起任务管理器或Get-Process在PowerShell中得到与他们的内存和CPU使用率沿运行的进程列表窗口。如何在Windows上看不到内存/ CPU使用率?

你也可以(在Windows PowerShell中的8或Get-Service)查看所有正在运行的服务。然而,对于服务你没有得到任何这些数字。

但从我的开发人员这点总是显得有点奇怪。当然,一项服务需要更多的部署工作,而且编码和调试很尴尬,但除此之外,它只是一个与其他任何程序相同的程序。

我敢肯定有一个很好的理由,为什么服务没有这些数字,一说可能有事情做与如何Windows上运行的服务。这是什么原因?

+3

要查看内存使用情况的服务,请https://superuser.com/questions/437428/in-windows-7-is-there-a-way-to-know-how-much-memory-a-service -if- – 2014-01-13 01:18:10

+2

为了防止重新提出这个问题:a)这与windows上的服务如何工作有关,这不是真正的超级用户问题,b)它已经有一个很好的答案。与上面的超级用户链接配对,它既有帮助又相关。 – 2014-01-13 01:33:26

+0

同意@George Mauer。这属于这里。 – DaveBoltman 2016-04-14 06:31:37

回答

2

有一个服务宿主进程“svchost.exe的”,可以启动/处理多种服务。由于资源消耗通常由流程级别的操作系统来衡量,因此同一主机进程启动的服务将全部显示为该进程的使用情况。

如果您查看控制面板的“服务”区域并查找启动服务的程序,您会发现大多数Windows服务都使用带有不同参数的“svchost.exe”来启动它。

任务管理器显示svchost.exe的多个实例,因此可以将特定服务隔离到svchost.exe的一个实例,但您需要知道哪个实例仅提供感兴趣的服务。您可以使用PowerShell通过svchost.exe启动服务,但挂在进程ID上,然后在任务管理器中添加进程ID列,以便查看内存/ CPU使用情况。

+0

那么这是否意味着杀死svchost会杀死所有服务?服务是否不在自己的过程中运行?所有这些工作究竟如何? – 2013-02-14 15:36:59

+0

不一定,某些服务可能由其他进程托管。此外,我还计算了12个运行在我盒子上的svchost实例,其中有些实例可能不想杀死。您将需要较低级别的工具来确定哪个服务在哪个进程中运行,我将从[System Internals](http://technet.microsoft.com/en-US/sysinternals)开始。 – 2013-02-14 16:30:16

+1

出于故障排除的目的,如果我们想要隔离在svchost下运行的任何一个服务,我们可以使用'sc config ServiceName type = own'来实现这一点http://blogs.technet.com/b/ganand/archive/2007/12/23/如何对分离即服务功能于它 - 拥有 - scvhost-exe.aspx – sergmat 2013-02-15 07:51:32

2

尽管我无法找到查看任何单个服务的内存使用情况的方法,但可以通过在命令行中使用tasklist /svc来查看每个svchost实例中运行的服务,以及内存使用情况通过查看进程ID,查看每个单独的svchost。