При администриране на гост VM, работещи на хостове за виртуализация (било то VMWare ESXi или Hyper-V), при анализиране на проблеми с производителността често се срещат ситуации, при които обемът на наличната операционна памет е много по-малък, отколкото вижда (присвоява) операционната система. Например, на виртуална машина се отделят 8 GB памет, мениджърът на задачи показва безплатни 1 GB памет, докато общото потребление на паметта на всички стартирани процеси не надвишава 3 GB. Къде отидоха останалите 4 GB??
Обикновено причината за това поведение е използването на функцията за свръхкомиране на паметта в хипервизора.
Памет преизпълни (Не знам определението на руски, нека има свръхкомисия на паметта) това е характеристика на хипервизора, който ви позволява да разпределяте повече памет за виртуални машини, отколкото има на физическия хост, но без да гарантирате, че в определен момент от време може да бъде разпределена цялата искана памет. Като правило, overcommit ви позволява да увеличите плътността на виртуалните машини на хоста поради факта, че паметта ще бъде динамично преразпределена между тях в зависимост от текущото натоварване (ресурсите на незаредени / празни VM могат да бъдат преразпределени между по-заредени)
В VMWare един от механизмите за прилагане на паметта е претоварена Балониране на паметта (изтласкване на паметта или, ако искате, мошеничество). В Hyper-V подобна функционалност се реализира от функцията Динамична памет.
забележка. Между другото, и VMWare, и Hyper-V използват компресията на паметта широко и доста ефективно, за да спестят памет и да внедрят технологията за свръхкоммисия..В VMWare топката се реализира чрез драйвера vmmemctl.sys (включена в VMware Tools), която, ако е необходимо, може да улови физическата памет, като надуе фиктивен процес с топка вътре в паметта (балон). По този начин заетата памет става недостъпна за приложенията и хипервизорът може да преразпределя освободената памет между други виртуални машини. Hyper-V динамичната памет използва драйвер dmvsc.sys от набор от интеграционни услуги (компонент на динамична памет VSC). Настройките на Overcommit се контролират от администратора на хипервизора..
Но как да се определи от VM, че всъщност има по-малко физическа памет от тази, която вижда операционната система?
Помислете как да определите присъствието и размера на драйвер за балон в гостна операционна система на Windows. Така че, ние ще анализираме следната ситуация:
Виртуалните машини с гост Windows Server 2012 R2 отделиха 8 GB RAM. Мениджърът на задачи показва, че паметта се използва при 93% (7.4 GB памет е заета). Ако обаче добавите обема памет, който използват всички работещи процеси, можете да стигнете до неочаквано заключение - всъщност се използват само 2,5 GB. Къде отидоха 5 GB памет? Нито Task Manager, нито Resource Monitor ще дадат отговор на този въпрос..За да разберете какво се случва с паметта, трябва да използвате помощната програма RamMap Марк Русинович (в един от предишните случаи показах как да използвам тази програма за диагностициране на проблем със системния кеш на файловата система). Изтеглете помощната програма от уебсайта на Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) и я стартирайте с права на администратор. След това в раздела Използвайте броя виждаме, че по-голямата част от паметта (5,4 GB) се използва от обекта Шофьорът е заключен.
Това е паметта, която хипервизорът „изяде“ и преразпредели към други виртуални машини чрез драйвера за балони в гостната ОС. Т.е. няма достатъчно памет за хоста на хипервизора или администратора на хипервизора, насилствено "убит" ресурси за тази VM.
Текущото оформление на паметта в виртуалните машини на Hyper-V може да бъде дадено от индивидуални броячи на производителността в Performance Monitor:
- Hyper-V динамична памет -> видима памет за гостите
- Hyper-V динамична памет -> физическа памет
За да деактивира това поведение, администраторът на хипервизора трябва да деактивира опцията в настройките на Hyper-V VM Активиране на динамичния паметy (или увеличете минималната стойност на резервацията).
Ако използвате хост VMWare ESXi, можете да използвате настройките за разпределение на ресурсите (Настройки на ресурса) запазете повече памет за тази машина или резервирайте цялата памет веднага - Запазете цялата памет на гостите (Всички заключени).