Перейти к основному содержимому

Высокое потребление памяти на 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