Назад | Перейти на главную страницу

Что это значит, когда PM (K) ps принимает отрицательные значения?

Я получил следующие отрицательные значения 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-битные версии.