Event ID 18591 Hyper-V: Не удалось выделить память для виртуальной машины
Архитектура выделения памяти в гипервизоре Hyper-V
Событие 18591 (и смежное 18590) логируется источником Hyper-V-Worker в журнале Microsoft-Windows-Hyper-V-Worker-Admin. Сообщение: "Не удалось выделить память для виртуальной машины '[Имя_ВМ]': Недостаточно системных ресурсов для завершения операции (0x8007000E / Out of Memory)". Гипервизор Hyper-V резервирует блоки физической оперативной памяти хоста (Root Partition) для гостевых систем. Если свободной физической памяти (Non-paged pool / Host RAM) недостаточно для удовлетворения запроса на запуск или расширение Dynamic Memory, ВМ не запустится или аварийно остановится.
Факторы дефицита памяти хоста:
- Суммарный объем статической памяти включенных ВМ превышает физический объем RAM хоста (Memory Overcommit).
- Высокое резервирование памяти хостовой ОС (например, на хосте Hyper-V установлены роли SQL Server или IIS).
- Фрагментация физической памяти (гипервизор не может найти непрерывный блок адресного пространства нужного размера).
Пошаговое дерево решений по балансировке памяти
Сценарий 1: Аудит потребления памяти виртуальными машинами через PowerShell
Выгрузите реальные показатели выделенной и динамической памяти всех ВМ на хосте.
# Анализ использования памяти виртуальными машинами
Get-VM | Select-Object Name, State, MemoryStartup, DynamicMemoryEnabled,
@{N='MemoryAssignedMB';E={$_.MemoryAssigned/1MB}},
@{N='MemoryDemandMB';E={$_.MemoryDemand/1MB}} |
Sort-Object MemoryAssignedMB -Descending | Format-Table -AutoSizeСценарий 2: Настройка динамической памяти (Dynamic Memory)
Для оптимизации распределения оперативной памяти включите динамическое масштабирование для ненагруженных ВМ.
- Откройте параметры виртуальной машины в Hyper-V Manager.
- Раздел Память (Memory) -> Установите флаг Включить динамическую память (Enable Dynamic Memory).
- Задайте Минимальный объем памяти (Minimum RAM) (например, 1024 МБ) и Максимальный объем (Maximum RAM).
- Настройте Буфер памяти (Memory Buffer) на уровне 20%.
Сценарий 3: Настройка резервирования памяти для хоста (Host Reserve)
Защитите саму систему управления хоста от исчерпания памяти виртуальными машинами через реестр.
# Установка резерва памяти для хостовой ОС Windows Server (в МБ)
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization' -Name 'MemoryReserve' -Value 4096 -Type DWordТиповые ошибки администраторов
- Установка сторонних тяжелых служб на хост виртуализации: Хост Hyper-V должен выполнять исключительно роль гипервизора. Запуск СУБД или терминальных служб на родительском разделе неизбежно отбирает память у ВМ.
Неправильное планирование емкости (Capacity Planning) приводит к падению сервисов в пиковые часы. Закажите оптимизацию инфраструктуры Hyper-V в ITSTM: настроим Dynamic Memory, кластеризацию и отказоустойчивость.
Частые вопросы (FAQ)
Что такое Smart Paging в Hyper-V?
Smart Paging — это технология гипервизора, позволяющая временно сбрасывать память ВМ на физический диск хоста в момент перезагрузки гостевой системы, если на хосте временно не хватает физической RAM для старта.
Почему для баз данных SQL не рекомендуется использовать Dynamic Memory?
Microsoft SQL Server резервирует максимальный объем доступной памяти под свой кэш буферного пула. Динамическое изменение RAM может вызывать агрессивное освобождение кэша и деградацию производительности СУБД.
Влияет ли архитектура NUMA на выделение памяти?
Да. Если размер памяти ВМ превышает размер локального NUMA-узла процессора (NUMA spanning), гипервизор вынужден обращаться к памяти соседнего сокета, что создает задержки и ошибки распределения при дефиците шины.
Можно ли изменить объем статической памяти ВМ на лету без выключения?
В Windows Server 2016 и новее для ВМ поколения Generation 2 поддерживается горячее добавление и удаление статической памяти (Hot Add/Remove RAM) без остановки гостевой ОС.