Using Memory Limits in vmware vSphere can cause severe performance issues. The guest operating system assumes it can use all of the allocated memory, but vSphere will make sure the vm cannot use more than the memory limit. It does this by inflating a memory balloon using the balloon driver included with the vmware tools. The performance chart in the vSphere Client will show the virtual machine is ballooning. I never recommend using memory limits in vmware.
The following script will remove all memory limits in your vSphere infrastructure, preventing the problems described above.
$vCenterServer = MyvCenterServer.domain.local #Enter your vCenter server FQDN here #Connect to vCenter Server $VC = Connect-VIServer $vCenterServer #Gathering data ForEach ($vm in get-vm) { $vmView = $vm | get-view Write-Host "======" Write-Host "VM: $($vm.Name)" Write-Host "Current Limit: $($vmView.config.MemoryAllocation.Limit)" If ($vmView.config.MemoryAllocation.Limit -ne -1) { #Preparing modified data $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $MemoryAllocation = New-Object VMware.Vim.ResourceAllocationInfo $MemoryAllocation.Limit = -1 $spec.MemoryAllocation = $MemoryAllocation #Applying modification Write-Host "Removing Memory Limit" $vmView.ReconfigVM($spec) #Reloading data $vm = get-vm $vm.name $vmView = $vm | get-view Write-Host "Current Limit: $($vmView.config.MemoryAllocation.Limit)" } #Cleanup Clear-Variable vmView -ErrorAction SilentlyContinue } #Disconnect Disconnect-VIServer $vCenterServer -Confirm:$false
You can download the script here (rename to .ps1): Remove-MemoryLimits
Don’t forget to use PowerCLI to run the script, or add the PowerCLI snapin to your Powershell session (Add-PSSnapIn vmware*).
Enjoy!