Hypervisor Memory Balloon Failure – 3 Fixes That Work
Memory balloon driver not working? Usually it's misconfigured reservation or a driver crash. Here's how to fix each cause.
1. Reservation Lock – Balloon Can't Inflate
What's actually happening here is your VM has a memory reservation set that equals or exceeds its allocated memory. The hypervisor won't balloon because it sees the VM has a guaranteed amount of RAM that can't be touched. This is the #1 reason ballooning fails on VMware ESXi and Hyper-V.
The fix: Drop the reservation to zero or below the VM's current active memory. On vSphere, edit VM settings and set Memory Reservation to 0. On Hyper-V, uncheck Reserve memory under Memory settings. Reboot the VM after.
# VMware CLI check reservation for VM named web-01
get-vm web-01 | select-object Name, MemoryReservationMB
The reason this fix works: with no reservation, the hypervisor owns the memory and can give it back to other VMs via the balloon driver. If you need a reservation for performance, you don't get ballooning – pick one.
2. Balloon Driver Crash or Stale State
Sometimes the balloon driver inside the guest OS crashes or gets stuck in a bad state. You'll see the driver in Device Manager with a yellow exclamation or the VM kernel logs show balloon timeouts. This is common after a VM snapshot restore or a live migration that interrupted the driver's state.
The fix: Uninstall and reinstall the VM tools (VMware Tools, Hyper-V Integration Services, or virtio drivers for KVM). Don't just update – remove completely, reboot, then install fresh. On Linux guests, you can also restart the balloon service directly:
# For VMware on Linux guest
sudo vmware-toolbox-cmd balloon disable
sudo vmware-toolbox-cmd balloon enable
# For KVM virtio-balloon
sudo modprobe -r virtio_balloon
sudo modprobe virtio_balloon
Why this works: removing the driver clears any corrupted state or stuck memory pages. A fresh install gives the driver a clean start. Don't skip the reboot – the hypervisor needs to renegotiate the balloon target with the driver.
Check the driver status with logs:
# On ESXi host, check balloon stats for a VM
esxcli vm process list | grep -A 10 "balloon"
# On Windows guest, check event log for VMware Tools
get-WinEvent -LogName 'VMware Tools' | where { $_.LevelDisplayName -eq 'Error' }
3. Memory Hot Plug Conflicts
If you've added or removed memory from a running VM without a reboot, the balloon driver can get confused. It's designed to work with a fixed memory configuration. Hot-plugged memory often breaks the balloon negotiation because the driver doesn't know about the new memory regions.
The fix: Cold reboot the VM. That's it – no commands needed. After the VM shuts down and starts fresh, the balloon driver reinitializes and sees the current memory layout correctly.
If you regularly hot-plug memory and need ballooning, you're stuck. The two features don't play well together. Either stop hot-plugging or accept that ballooning won't work on that VM. I've seen this bite people in production many times – they add RAM to a VM without rebooting and wonder why memory reclaim stops.
To avoid this, plan memory changes during maintenance windows with a full reboot.
Quick-Reference Table
| Cause | Symptoms | Fix |
|---|---|---|
| Reservation lock | Balloon target always 0, VM has reservation set | Set reservation to 0, reboot VM |
| Driver crash / stale state | Driver error in guest, balloon stats show 0 | Uninstall and reinstall VM tools, or restart balloon service |
| Memory hot plug conflict | Balloon stops after hot-add or hot-remove of RAM | Cold reboot the VM |
Memory ballooning is a useful tool for overcommitting RAM on your hypervisor. But it's fragile – reservations, driver issues, and hot plug are the three things that kill it. Fix the cause, not the symptom. Start with reservation check, then driver health, then rule out hot plug. That order covers 90% of failures.
Was this solution helpful?