Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am currently testing VMWare ESXi on a test machine. My host machine has 4gigs of ram. I have three guests and each is assigned a memory limit of 1 GB (and only 512 MB reserved).

The host summary screen shows a memory capacity of 4082.55 MB and a usage of 2828 MB with two guests running. This seems to make sense, two gigs for each VM plus an overhead for the host. 800MB seems high but that is still reasonable.

But on the Resource Allocation Screen I see a memory capacity of 2356 MB and an available capacity of 596 MB.

Under the configuration tab, memory link I see a physical total of 4082.5 MB, System of 531.5 MB and VM of 3551.0 MB.

I have only allocated my VMs for a gig each, and with two VMs running they are taking up almost two times the amount of ram allocated. Why is this, and why does the Resource Allocation screen short change me so much?

When I try to run my third VM I get a message saying Memory Admission check failed which sounds like there isn't enough ram. My production machine will have much more ram, but I'd like to get a better handle on how ESXi works.

share|improve this question
add comment

1 Answer

A couple of things:

  1. Don't use Limits on RAM. To cap the amount of RAM the VM can use, use the amount of RAM when definining the VM. Otherwise, if you set a limit for RAM on a VM smaller than the amount of RAM that's defined for the VM, ESX will be forced to page. If paging is to occur, you want the guest to page inside itself because it's more intelligent about what data should be paged than ESXi is. When definining a VM, you want to define the RAM as the highest amount of RAM the VM might need, or the cap you want the VM to use.

  2. Unless absolutely necessary, do not use reservations for any VM on any resource, including memory. If you install VMTools, which you always should unless you have a good reason not to, ESXi can reclaim memory, particularly when it's not being used. Setting reservations will force ESXi to provide physical memory even if the guest doesn't need it. Instead, use Shares to set priority when there is resource contention.

The above is very important. If you do not follow those, what will happen is you'll have inefficient paging, and inefficient granting of resources because VM's that don't need RAM will get it anyway, and VM's that could use the RAM won't get it. You'll also often times have VM's that need RAM, but may not get it even if there is some to provide.

The difference between those two screens comes down to the summary being how much RAM is actually being used, and total capacity shows the amount that could be used adjusted after reservations.

To answer your question, this is a reservation setting for the Hypervisor. This illustrates actually my above point that you shouldn't use reservations unless you abslutely have to. The ESXi hypervisor has perhaps too high of a memory reservation. You can tweak this. Reference the following article:

http://vm-help.com/esx40i/memory_allocation.php

I don't recommend doing that for production though.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.