Я получил следующие отрицательные значения PM (объем выгружаемой памяти, используемой процессом, в килобайтах) при выполнении ps
команда. Что это значит, когда значения отрицательные?
PS H:\> ps sqlservr Handles 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 Handles 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 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 6481 4258 -1218832 1537376 981 ...56.55 8344 sqlservr
Отрицательное значение может быть переполнением Int32
? Однако следующие утверждения показывают, что выгружаемая память была 4 ТБ? Что невозможно.
$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-битные версии.