Virtual machines offer numerous advantages over their physical counterparts. I’ll summarize a few of them for you. First there is the flexibility with its hardware, you can easily add or reduce the server’s memory, add or remove a processor, add a virtual disk or increase an existing disk’s size by shutting the VM down and changing it’s settings. Second is the snapshot feature that lets you save the state of the server in case you need to restore it later on. This feature can be a real lifesaver when patching or upgrading applications on servers. Manageability of virtual servers is also easier because you can easily connect to the servers console remotely without the need for special remote access hardware like HP’s ILO. You can also easily clone virtual servers and create templates to quickly create new ones. Lastly virtual servers all see the same virtual hardware (except for processors) regardless of the physical hardware that they are hosted on. This ensures that your applications all run on similar hardware to eliminate problems that may arise from dis-similar hardware.
On the other hand, virtualization does come with some performance hits, especially with I/O. For most server operations, CPU isn’t going to matter, and the benefit of consolidation is going to outweigh the CPU overhead (especially since many servers would otherwise spend a lot of time idling, anyway). But very processor-intensive operations (eg some financial calculations) or I/O heavy servers (eg databases) are often not good candidates for virtualization.
You should also watch out for server sprawl, which is when departments make too many VMs. Because it’s so easy (and cheap) to create a new server with virtualization, departments tend to be less careful about requesting them. If you’re not careful, you can end up with dozens of servers (or more) that are now all taking up disk space and need to be patched and updated. Preventing this is largely a procedural matter.
VMs do make for good test systems, too; the added flexibility makes it easier to test the system with different configurations. And they can be a great way to move legacy servers to new hardware. Some legacy OSs or apps may not be able to run on newer hardware directly, but you can virtualize them and present them with an environment that looks to them like the old system.