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

显然,.NET框架有一个错误,可以防止2GB以上的工作设置值被精确地确定。 在2到4GB之间,可以应用一些异或计算来获得值,但是没有办法获得大于4GB的工作集值(使用.Net或WMI)

当工作集大于4GB时,可以使用哪种方法(最好是使用PowerShell脚本)获得对进程工作集的精确度量?

(一些边的细节可以在这个StackOverflow问题中find)

这是为了监视一个特定的过程:

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

编辑:阅读SOpost,我看到你正在试图超过4 GB的任何进程,而不会传递一个特定的过程到脚本。 下面是一个将执行此操作的脚本,下面是指向脚本专家博客文章的链接,该文章解释了如何使用Get-Counter cmdlet:

 "\Process(*)\Working Set" | Get-Counter -computer <computer> | ForEach {$_.CounterSamples} | ? {$_.cookedvalue -gt 4294967296} | ft -AutoSize 

我知道这是一个老问题,但仍然活着,这显示真正的64位内存使用PowerShell中:

get-process $ Processname -computername $ Computername | ft名称,ID,VirtualMemorySize64,PeakVirtualMemorySize64,WorkingSet64,PeakWorkingSet64

这显示内存使用情况超过gps |其中{$ _。workingset64 -gt 4000Mb} | ft name,pm,workingset64,id