There was an interesting internal thread that I came across yesterday where someone was asking if VMware Fusion supported memory overcommitment like VMware Workstation? In VMware Workstation, memory overcommitment can be adjusted by going to Edit->Preferences->Memory which provides three different options as shown in the screenshot below. This setting specifies the percentage of memory that would be reserved from the physical host memory for each Virtual Machine.
These options map to the following % of host memory reservation:
Option | % of Host Memory Reserved Per VM |
---|---|
Fit all virtual machine memory into reserved host RAM | 100 |
Allow some virtual memory to be swapped | 50 |
Allow most virtual memory to be swapped | 25 |
Disclaimer: Be aware, that default safe guards have been put in place to ensure optimal VM performance. If you decide to change these settings and allow memory overcommitment, it can potentially degrade performance of both your VMs as well as host system. Make sure you understand the changes before applying them.
You can also specify a custom value by editing the VMware Workstation configuration file located in: C:\ProgramData\VMware\VMware Workstation\config.ini and modifying or adding the following property:
prefvmx.minVmMemPct = P
where P is the percentage of configured VM memory that should fit into the host memory. The smallest value that P can be is 1. Below is a screenshot of a 32GB VM running on a Macbook Air with latest version of Fusion (8.5.3) which only has 8GB of physical memory and the value that I had used for this demonstration is 1.
Going back to VMware Fusion, memory overcommitment is also possible but the option to configure it is not available in the VMware Fusion UI. You will need to add the above setting into the VMware Fusion configuration file located in /Library/Preferences/VMware\ Fusion/config which does not exist by default. You will need to restart Fusion/Workstation for the change to go into effect.
In addition to the change, if you do decide to overcommit your memory, it was also mentioned that you may also want to disable Hard Disk buffering for optimal performance. You can make this change in the Advanced Settings of the the VM as seen in the screenshot below.
You can also just add the following property to the Virtual Machine's VMX configuration file:
hard-disk.hostBuffer = "disabled"
Memory commitment can be a wonderful tool, especially for lab environments. If you combine this with SSD storage and if swapping does occur, the impact may be acceptable so that you can run a few more VMs. Thanks to Regis Duchesne & Jesse Pool for sharing this handy tidbit!
askarkopbayev says
What version of Fusion do you run? I can't find config file in /Library/Preferences/VMware\ Fusion/ in my VMware Fusion 7.1
William Lam says
I'm using Fusion 7.1, but as I mentioned in the post already the "config" file does NOT exist by default on ANY version of Fusion. You will need to manually create it.
askarkopbayev says
my bad. should have read it more accurately. thanks a lot!
Jesse Goodier says
Works on Fusion 7.1 for me. Thank you so much!
David says
I tried this in Fusion 7.1.1 and it doesn't work, my VMs always get a fixed amount of memory. I tried minVmMemPct as per your post and two other parameters I found in VMware forums, all to no avail.
$ cat '/Library/Preferences/VMware Fusion/config'
prefvmx.minVmMemPct = 50
prefvmx.useRecommendedLockedMemSize = FALSE
vmmon.disableHostParameters = TRUE
How could I troubleshoot this problem?
John says
I'm also trying to get this to work but am not sure how I can tell if it is working.
kelvin says
I am using fusion 8.1.1. The config file is locked and unable to add in the parameter even though I give it read-write access.
David says
Use chflags to unlock the file.
Buschi says
Are there any news on this topic? MacBook Pro with 16GB RAM did not change anything with the new config file. Should there be 32GB available in the menu for the VM's after I define overcommitment value to 50 (prefvmx.minVmMemPct = 50)?!
William Lam says
Have you either restarted Fusion or restarted your system? I noticed I needed to restart Fusion for the changes to take affect
David says
I'll repost my message from 18 months ago, maybe this time I'm luckier:
I tried this in Fusion 7.1.1 and it doesn’t work, my VMs always get a fixed amount of memory. I tried minVmMemPct as per your post and two other parameters I found in VMware forums, all to no avail.
$ cat ‘/Library/Preferences/VMware Fusion/config’
prefvmx.minVmMemPct = 50
prefvmx.useRecommendedLockedMemSize = FALSE
vmmon.disableHostParameters = TRUE
How could I troubleshoot this problem?
William Lam says
David,
How much memory does your physical system have? If you want to increase the amount of memory that all VMs can use, try adding the following:
prefvmx.allVMMemoryLimit = # Desired amount of RAM in MB.
You might also want to consider reducing prefvmx.minVmMemPct to smaller value. Note 1 is the smallest.
As others have indicated this works fine on Fusion 7.x and I've also re-verified this works on latest Fusion which is 8.5.3 (As of updating this morning). I've even included an updated screenshot of running a 32GB VM on my Macbook Air which only has 8GB of physical memory (using prefvmx.minVmMemPct = 1)
David says
I have the same hw setup, MBA 8GB. This is what I found.
prefvmx.minVmMemPct = P
P phy max
mem mem
swap some 50 8192 7736
swap most 25 8192 15280
swap ? 1 8192 32000*
* 32768 were above the limit (~32GB?) Fusion seems to watch for free space in the host (I have ~68GB).
I can configure 7/15/32GB in a vm with P being 50/25/1 respectively, so don't think P is a percentage.
How can you read memory usage from host and vm on the cli?
I checked the binaries at /Applications/VMware\ Fusion.app/Contents/Library/, but none of them seem to serve this purpose.
David says
All the spacing has been deleted when posting the comment. It should look like this.
-----------------P---phy----max
----------------------mem--mem
swap some--50--8192---7736
swap most---25--8192--15280
swap ?---------1--8192--32000*
Hans says
Hello William,
Good post you have here.
One question, how can I see if this config file is really adopted by Fusion. If I open the settings for my VM I still see the max amount of RAM is 16GB (this is my physical memory) when I enter 32GB I still get the message "Memory is overallocated for your Mac, and I'm not able to start my VM due to this memory over allocation.
I saved the config file in: \Library\Preferences|VMware Fusion\
I created the file with TextEdit which is saved as a Rich Text Document.
My hardware is a MacBook Pro i7 with 16GB RAM.
Hans says
To be complete, this is the content of my "config" file. I suppose the name of this file is indeed ?
prefvmx.minVmMemPct = 25
prefvmx.useRecommendedLockedMemSize = FALSE
vmmon.disableHostParameters = TRUE
prefvmx.allVMMemoryLimit = 65536
Thanks.
David says
Quit Fusion, open Terminal and write a plain text file
sudo vi /Library/Preferences/VMware\ Fusion/config
then add this line
prefvmx.minVmMemPct = 1
Next add 32768 in the memory size field of a VM's preferences.
Hans says
Thanks David!
It's working !!!
Alex !! says
Hi David .
Unfortunately my vintage Macbook (Late ´08 Aluminium) have only 2GB RAM…
So, running El Capitan with VMware Fusion 5.10 … i’ m wandering if the same lines that you showed to HANS in Terminal will work for me …and if not, your guidance would be greatly appreciated .
Thanks , Alex
David says
Hi Alex
I don't have such a system to try on, so you'll have to give it a try yourself. Please, do get back and post your findings.