The thing that stops me from running lots and lots of virtual machines is the amount of RAM I can fit into a server.
My current build server runs 9 VMs taking just over 7 GB in total. The host has 8 GB of RAM.
The 4 cores on the host are virtually idle. Certainly CPU-wise there is nothing stopping us running 16 or possibly even 32 VMs.
RAM is the problem. The server can take 16 GB maximum, at a cost (for cheap desktop RAM) of only about $400, and I get the original 8 GB back to recycle somewhere else. Unfortunately the larger RAM would be slower. For most consumer hardware 8 or 16 GB seems to be the limit anyway.
Ulrich Drepper has a very good analysis of DDR RAM, why larger sizes are necessarily slower, and why you can’t design single socket systems that take arbitrarily huge amounts of RAM.
I’m left doing workarounds: reduce the amount of RAM assigned to each guest, keep guests paused or powered off when not directly in use, move guests between servers, … Not ideal.