Hyper-V VM Won't Start: Diagnosing Dynamic Memory Failures
A Hyper-V VM fails to start despite free host RAM. Check Startup RAM, Dynamic Memory, Data Exchange service, and NUMA constraints.
25 Oct 2025, 06:32 UTC

The problem and the useful takeaway
A Hyper-V virtual machine will not start. Hyper-V Manager or the Virtual Machine Management Service (VMMS) reports insufficient memory, even though Task Manager on the host shows free physical RAM. The useful takeaway is that the memory is usually present on the host but unavailable to this VM: it is reserved for the host, already assigned to other running VMs, or blocked by a Dynamic Memory configuration the guest cannot honor.
Recognizable condition
- VM start fails with an insufficient-memory message in Hyper-V Manager or VMMS logs.
- Host Task Manager shows available physical memory greater than the VM’s configured Startup RAM.
- The VM may start after other VMs are shut down, indicating host-level capacity pressure rather than guest corruption.
Cause and diagnostic table
| Observed condition | Likely cause | Where to confirm |
|---|---|---|
| Startup RAM exceeds free host memory after host reserve and other VMs | Configured Startup RAM is too high for available host capacity | Hyper-V Manager > VM Settings > Memory; Task Manager > Performance > Memory |
| Minimum RAM near Startup RAM, or Memory Buffer leaves little headroom | Dynamic Memory cannot grow or reclaim memory as needed | Hyper-V Manager > VM Settings > Memory |
| Guest memory pressure is not reported; Dynamic Memory stays static | Hyper-V Data Exchange Service is stopped or Integration Services are outdated | Guest OS > services.msc > Hyper-V Data Exchange Service |
| VM fails only on a specific host node with NUMA spanning disabled | Insufficient local NUMA node memory | Hyper-V Manager > Host Settings > NUMA Spanning |
Ordered checks
1. Measure free host memory
Run this on the Hyper-V host in an elevated PowerShell session. Values are in megabytes.
Get-CimInstance -ClassName Win32_OperatingSystem |`
Select-Object CSName,`
@{Name='FreeMB';Expression={[math]::Round($_.FreePhysicalMemory/1MB)}},`
@{Name='TotalMB';Expression={[math]::Round($_.TotalVisibleMemorySize/1MB)}}
- Where: Elevated PowerShell on the Hyper-V host.
- Permissions: Local Administrator or Hyper-V Administrators.
- Expected check: FreeMB should be larger than the VM’s Startup RAM plus the memory you want to reserve for the host and other VMs.
- Risk: Read-only command; no configuration risk.
2. Inspect the failing VM’s memory settings
Get-VM -Name "<VMName>" | Select-Object Name, MemoryStartup, MemoryMinimum, MemoryMaximum, MemoryBuffer
- Where: Elevated PowerShell on the host, or Hyper-V Manager GUI.
- Permissions: Hyper-V Administrators or local Administrator.
- Expected check: Compare MemoryStartup against the FreeMB result from step 1.
- Risk: Read-only.
3. Verify the guest can report memory pressure
Inside the guest OS, run this in an elevated PowerShell session:
Get-Service -Name "vmichexchange" | Select-Object Name, Status, StartType
- Where: Inside the guest virtual machine.
- Permissions: Guest Administrator.
- Expected check: Status is Running and StartType is Automatic.
- Risk: Read-only.
4. Check NUMA spanning and node memory
In Hyper-V Manager, open Hyper-V Settings on the host and check NUMA Spanning. If it is disabled, confirm whether the VM’s assigned NUMA node has enough free local memory for the Startup RAM request.
Fixes tied to findings
Fix A: Reduce Startup RAM
If the VM’s Startup RAM is larger than available host memory, shut down the VM and lower Startup RAM. Example: an 8 GB host reserves 2 GB for itself and runs other VMs consuming 4 GB, leaving roughly 2 GB available. A VM configured with 4096 MB Startup RAM will fail; set it to 2048 MB or less, then start the VM.
Set-VM -Name "<VMName>" -MemoryStartupMB 2048
- Requirement: The VM must be off to change Startup RAM.
- Risk: Setting Startup RAM below the guest OS boot requirement can prevent startup entirely. Leave headroom above the operating system minimum.
Fix B: Adjust Dynamic Memory Minimum and Buffer
If Minimum RAM is too close to Startup RAM, Dynamic Memory cannot reclaim unused memory. Lower Minimum RAM and keep Memory Buffer at a conservative value, such as 20 percent.
Set-VM -Name "<VMName>" -MemoryMinimumMB 1024 -MemoryBuffer 20
- Requirement: Shut down the VM before changing these values unless your guest OS and Hyper-V version support live changes.
- Risk: Minimum RAM set too low can cause guest instability under sudden load. Validate steady-state memory usage before production use.
Fix C: Start or repair the Data Exchange service
Inside the guest, set the Hyper-V Data Exchange service to Automatic and start it:
Set-Service -Name "vmichexchange" -StartupType Automatic -Status Running
If the service is missing or fails, install or update Hyper-V Integration Services on Windows guests, or Linux Integration Services on Linux guests. Linux behavior varies by distribution and kernel version; it is not identical to Windows guests.
Fix D: Address NUMA memory constraints
Enable NUMA spanning at the host level so the VM can use memory across NUMA nodes, or move the VM to a host node with sufficient local free memory. Enabling NUMA spanning is a host-level change and can affect memory placement for all VMs.
Rollback
These operations change VM configuration. Before applying any fix, record the original Startup RAM, Minimum RAM, Maximum RAM, and Buffer values. To roll back, shut down the VM and reapply the recorded values with Set-VM or Hyper-V Manager, then attempt the start again.
Escalation criteria
- Multiple VMs fail to start at the same time.
- VMMS crashes repeatedly or stops responding.
- Host available memory is near zero even with no VMs running.
- The VM still will not start after the fixes above.
Treat these as host capacity exhaustion or a VMMS failure. Collect Microsoft-Windows-Hyper-V-VMMS event logs from Event Viewer under Applications and Services Logs > Microsoft > Windows > Hyper-V-VMMS, capture host memory status, and engage support.
Limitations and how to verify the result
- This guide assumes Windows Server 2019 or 2022 Hyper-V. Behavior in Windows Server 2016 is similar, but cmdlet output and property names may differ.
- Per-VM fixes do not resolve systemic memory overcommit across many VMs.
- Linux guests rely on Linux Integration Services; behavior and service names differ from Windows guests.
After applying a fix, perform a cold start of the VM. Monitor host available memory and guest committed memory for several minutes. Confirm in Event Viewer that no new VMMS admin events appear around the start attempt.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.