Перейти до основного вмісту

Високе споживання пам'яті на Hyper-V віртуальних машинах

У клієнтів WHS-тарифів досить часто виникає питання - чому свіже встановлена ОС, де ще немає жодного клієнтського ПЗ, споживає 80-90% оперативної пам'яті.

Виглядає це наступним чином:

HyperV high memory usage 1

У процесах при цьому не видно, що використовує багато ресурсів:

HyperV high memory usage 2

Це нормальна поведінка - так виглядає робота механізму Hyper-V Dynamic Memory

https://technet.microsoft.com/en-us/library/hh831766.aspx

Якщо віртуальній машині стає потрібно більше оперативної пам'яті, вона виділяється автоматично.

Як можна з віртуальної машини переконатися, що все гаразд, і обіцяний за тарифом обсяг оперативної пам'яті справді надається?

Наприклад, завантаживши утиліту RamMap від Sysinternals - ця компанія належить Microsoft, тому утиліту можна вважати офіційною, і вона рекомендована до використання:

https://technet.microsoft.com/en-us/sysinternals/rammap.aspx

https://download.sysinternals.com/files/RAMMap.zip

Пам'ять, що зарезервована системою віртуалізації, відображається як Driver Locked:

HyperV high memory usage 3

Як можна дізнатися, скільки пам'яті споживають сумарно процеси на сервері?

Це можна зробити наступною командою PowerShell (при включеному прокиданні буфера обміну команду можна вставити в PowerShell консоль кліком правої кнопки миші):

Get-Process | measure PM-sum

Як ми бачимо, всього запущено 39 процесів, і вони споживають 358739968 байт оперативної пам'яті, тобто, приблизно 350Мб.

HyperV high memory usage 4

Щоб не доводилося рахувати вручну з ризиком помилитися у кількості знаків, можна використовувати команду:

$mem = 0; Get-Process | %{$mem += $_.pm}; "{0:N2}MB " -f ($mem/1mb)

Отримуємо 340Мб, що відповідає дійсності.

HyperV high memory usage 5