执行该命令时,我得到了以下负的 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 位版本。