我正在编写一个 PowerShell 脚本,根据 Get-Process 的值工作集 (WS) 获取消耗内存的前 10 个进程。我运行以下行并获取结果,看起来很棒,但当我检查任务管理器时,我没有得到相同的值。甚至顺序也不同。
Get-Process | Sort WS -Descending | Select Name,WS -First 10
得到这个:
然后任务管理器有这个:
我还需要做其他计算吗?有人能解释一下吗?
PS:OS是葡萄牙语的。
答案1
好的,我刚刚意识到发生了什么。任务管理器中默认的“内存”列实际上代表的是私有工作集,而不是 Powershell 中的工作集,后者代表与其他进程共享的私有内存。只需在任务管理器中启用“内存 - 工作集”列,它就会匹配。
显然Powershell中的值以字节为单位,需要计算到Mb。
这个页面也很有帮助:
http://windows.microsoft.com/en-us/windows/what-task-manager-memory-columns-mean#1TC=windows-7
答案2
(共享)工作集和私有工作集是两个不同的东西。
更多信息关于内存使用情况或:工作集与私有工作集。
要通过 PowerShell 中的 Get-Process 获取私有工作集,可以使用“PrivateMemorySize”:
Get-process | Sort PrivateMemorySize -Descending | Select Name,PrivateMemorySize -First 10