Windows

當 ps 的 PM(K) 為負值時,這意味著什麼?

  • August 31, 2015

執行命令時,我得到了以下負 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)

如果頁面文件在過去的某個時間點增長,並且此後縮小,則可能會出現負值。SQL Server 使用大量記憶體和大量頁面,因此這種類型的行為對於 SQL Server 來說非常常見。

編輯:這也可能是因為 Int32 的大小……在這種情況下,使用提供的 64 位屬性:

ps sqlserver | select WorkingSet64

或者

ps sqlserver | select PagedMemorySize64

由於這個原因,大多數記憶體屬性都有相應的 64 位版本。

引用自:https://serverfault.com/questions/718112