如何监视大于4GB的Windows进程的工作集?

如何监视大于4GB的Windows进程的工作集?

显然,.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-Countercmdlet:

"\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

相关内容