При выполнении команды ps я получил следующие отрицательные значения PM (объем доступной памяти, который использует процесс в килобайтах). Что это значит, когда значения отрицательные?

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

1 ответ1

0

Поле PM представляет собой 32-битное число, и значение в нем происходит из 32-битного системного вызова. Наибольшее число, которое может поместиться в 32-битном поле, составляет 4 ГБ.

Похоже, что объем выгружаемой памяти, используемой sqlservr, превышает 4 ГБ.

Но это не имеет значения, потому что оказывается, что объекты Process также содержат 64-битные свойства. Вы можете просто использовать их вместо этого. Чтобы получить выгружаемую память, сделайте это:

(ps sqlservr).PagedMemorySize64

Чтобы получить значение в килобайтах (например, поле «PM (K)»), сделайте следующее:

(ps sqlservr).PagedMemorySize64 / 1kb

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .