显然,.NET 框架有一个错误,导致无法准确确定 2GB 以上的工作集值。在 2 到 4GB 之间,可以应用一些异或计算来获取值,但没有办法获取大于 4GB 的工作集值(使用 .Net 或 WMI)
当工作集大于 4GB 时,可以使用什么方法(最好是使用 PowerShell 脚本)来获取进程工作集的准确测量值?
(部分细节可参见这个 StackOverflow 问题)
答案1
这是为了监视特定过程:
"\Process(<process name>)\Working Set" | get-counter -computer <computer>
输出以字节为单位,但您可以使用以下命令将其转换为 GB:
"\Process(<process name>)\Working Set" | get-counter -computer <computer>
| ForEach {$_.CounterSamples} | ForEach {[math]::round($_.cookedvalue/1GB,2)}
编辑:
阅读 SO 帖子后,我发现您只是试图获取超过 4 GB 的任何进程,而不将特定进程传递给脚本。下面是一个可以执行此操作的脚本,以下是指向脚本专家博客文章解释了如何使用该Get-Counter
cmdlet:
"\Process(*)\Working Set" | Get-Counter -computer <computer>
| ForEach {$_.CounterSamples} | ? {$_.cookedvalue -gt 4294967296} | ft -AutoSize
答案2
我知道这是一个老问题但仍然存在,这显示了 powershell 中真正的 64 位内存使用情况:
获取进程 $Processname -计算机名称 $Computername | ft 名称、ID、VirtualMemorySize64、PeakVirtualMemorySize64、WorkingSet64、PeakWorkingSet64
这显示了 gps 的内存使用情况 |其中 {$_.workingset64 -gt 4000Mb }|ft name,pm,workingset64,id