当 ps 的 PM(K) 取负值时意味着什么?

当 ps 的 PM(K) 取负值时意味着什么?

执行该命令时,我得到了以下负的 PM(进程正在使用的可分页内存量,以千字节为单位)值ps。这些值为负时意味着什么?

PS H:\> ps sqlservr

处理 NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
   5947 4145 -1218888 1537304 981 ...50.77 8344 sqlservr


PS H:\> ps sqlservr

处理 NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
   6060 4172 -1218876 1537316 981 ...52.08 8344 sqlservr


PS H:\> ps sqlservr

处理 NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
   6481 4258 -1218832 1537376 981 ...56.55 8344 sqlservr

负值可能是溢出Int32?但是,以下语句显示分页内存为4TB?这是不可能的。

$m = [int32]::MaxValue
($m + ($m -1218832) + 2)/1024/1024
# returns 4094.83763122559 (GB)

答案1

如果页面文件在过去某个时间点增长,然后又缩小,则会出现负值。SQL Server 使用大量内存和页面,因此这种行为对于 SQL Server 来说很常见。

编辑:这也可能是因为 Int32 的大小...在这种情况下,使用提供的 64 位属性:

ps sqlserver | select WorkingSet64

或者

ps sqlserver | select PagedMemorySize64

出于这个原因,大多数内存属性都有相应的 64 位版本。

相关内容