Quick answer
Set the resource pool's CPU and memory reservations to 0, or enable Expandable Reservation on both the pool and the VM. The error means your pool's reserved capacity is fully committed — the pool itself is the bottleneck, not the host.
Why this happens
What's actually happening here is that resource pools in vSphere act like containers with their own reservation caps. Even if the ESXi host has 200 GB of free memory, if your pool has a 32 GB reservation and 32 GB is already used by running VMs, the 33rd VM can't start. The host can't allocate what the pool doesn't own.
This trips up a lot of people because the error message says "does not have enough available resources to satisfy the request" — you look at the host and see plenty of resources. But the system is checking the pool's reservation budget, not the host's total free resources.
I've seen this most often when someone sets a high reservation on a pool for a production cluster (like 100% of the host's memory) and then tries to power on a VM after vMotion moves VMs around. The pool still holds its old reservation, but the host it lands on might have less free memory than the pool expects.
Fix steps
- Check the pool's reservation settings
In vCenter, go to Hosts and Clusters → Select your resource pool → Configure → Resource Reservation. Look at CPU Reservation and Memory Reservation.Example: If it says 32 GB Memory Reservation and 5 VMs each have 8 GB reserved, that's 40 GB total — pool can't give more. - Set both reservations to 0
Click Edit on the resource pool. Set CPU and Memory Reservation to 0 MB. This removes the pool's artificial cap. The VMs will still use their own reservations if set, but the pool won't block them.This won't kill running VMs — vSphere will just stop reserving that capacity for the pool. The pool becomes a soft limit.
- Enable Expandable Reservation
Stay on the same Edit screen. Check Expandable Reservation for both CPU and Memory. This tells the pool: "if you run out of reserved resources, borrow from the parent resource pool (or cluster)".Without this, the pool is a hard wall — Expandable makes it a flexible ceiling. - Check the VM's own reservation
Go to the VM that won't start → Edit Settings → Virtual Hardware → CPU/Memory → Reservation. Make sure it's not set higher than what the pool can provide after other VMs are accounted for. If the pool has 0 reservation, this usually isn't a problem — but if the VM has a 16 GB reservation and the pool only has 10 GB free, it still fails. - Restart the VM
Right-click the VM and power it on. Should work now. If not, move to alternative fixes.
Alternative fixes if the main one fails
- Remove the VM from the pool temporarily
Drag the VM out of the resource pool into the cluster root. Start it there. This bypasses the pool's limit entirely. Then drag it back into the pool. This works because the VM checks the pool at power-on, but after it's running, moving it into a pool works fine. - Increase the pool's reservation
If you really need the pool to guarantee resources, set the reservation to a value that covers all VMs. For example, if you have 4 VMs each needing 8 GB memory, set the pool reservation to at least 40 GB (4 × 8 GB + some headroom). - Check for shadow resource pools
In vSphere 8, DRS can create internal resource pools for vSphere Clusters. UseGet-ResourcePool * | Select Name, CpuReservationMhz, MemReservationMBin PowerCLI to list hidden pools. Sometimes a parent pool inherits a reservation you didn't set. - Reconfigure the VM's memory allocation
Lower the VM's memory reservation to 0. If the VM doesn't need guaranteed memory, this gives the pool more room. Most VMs work fine with 0 reservation — only set one if the application demands it (like SQL Server).
Prevention tip
Don't set resource pool reservations unless you have a clear reason — like isolating a noisy neighbor or guaranteeing capacity for a critical app. For most pools, leave reservations at 0 and enable Expandable Reservation. This way the pool acts as a prioritization tool, not a bottleneck.
Also, monitor pool usage in vSphere with alarms. Set a warning if pool reservation usage exceeds 80%. You can do this via vCenter → Alarms → New Alarm Definition → Monitor resource pool memory reservation usage.
One last thing: if you use Memory Hot Add on VMs, that doubles the memory reservation needed at power-on. The VM reserves the hot-add limit, not the configured memory. So a VM with 8 GB memory and a 64 GB hot-add limit will reserve 64 GB in the pool. Turn off hot add if you don't need it.