我使用 Powershell Get-Process cmdlet 进行了一些验证,并获得了一些有关某些进程的奇怪值。我在一台服务器上进行了测试,该服务器正在运行 SQL Server 实例,并且根据资源监视器的报告,它消耗了 3GB 以上的内存,在运行 Get-Process 时,我在 SQL 服务器进程的 WorkingSet 上获得了负值,另一个进程正在消耗 2GB 以上的 PrivateMemorySize,并在 PM 上获得了相同的负值。
以下是结果的截图。
抱歉,操作系统是葡萄牙语的。
电源外壳:
检查 sqlservr 和最后的 scvhost...
幸运的是,我的脚本使用 WMI(Win32_Process 类)来获取进程信息,并且那里的值是正确的并且一切都匹配。
这是错误吗?也许是数值太大?我正在使用 Powershell v3。
答案1
这是 x64 服务器吗?如果是,那有可能这篇博文解释了您的问题。显然,这与 get-process 读取 x64 系统内存的方式有关:
发帖人看到负数的原因很简单:WS 属性别名为 WorkingSet,但 WorkingSet 是 32 位值。在发帖人的情况下,工作集大小溢出了 32 位值,导致显示负数。
根据博客的解决方案最终是强制格式化查询结果:
$process = “*SQL"*” GPS $process | ft name, workingset64 –auto
答案2
选择 WorkingSet64 而不是 WorkingSet 对我来说就可以解决问题,而且无需格式化。