How can I figure out what hardware specifications I need to adequately support a given number of users and virtual machines? Are there any guidelines on minimum resources per user, etc?
Let's look at the various cases for the software you want to run:
If you have one database server shared among all the developers, you should run your database server with access to many CPU cores and as much RAM as possible. A fast (but not necessarily large) disk is important. Disk size will depend on whether you are planning to store full production-scale data for development, or if you can get by on a few gigabytes. Having the database bottleneck would be a Bad Thing, but keep in mind that a development database workload can be very different from a production database workload. The former is likely to be smaller in scale and involve more inefficient queries (while the queries are still being developed and data is being explored by ad-hoc queries), whereas a production database is likely to have optimized queries run against it and operate on huge datasets which are (hopefully) largely cached in RAM.
JBoss is mainly going to be using CPU time (while executing servlets), lots of RAM (because it's Java), and network bandwidth. Like a database, an advanced application server can benefit from multiple cores. The best way to figure out the right number of virtual cores to assign is to test it at different numbers of cores. But as a general rule, never assign more virtual cores than you have physical cores.
- Eclipse development desktop environments
This is tricky. Eclipse itself will eat several hundred megs of RAM, but that number should remain fairly static and level once all your plugins are loaded. So you may want to check out how much RAM is needed based on how many plugins you run. The simplest Eclipse RCP applications can use as little as 10 or 20 MB of RAM, but a full-fledged JavaEE environment with GEF tools, version control tools and database tools can eat over a gigabyte of memory. Compilation of Java source files isn't as dependent on CPU as native code, but can still benefit from multiple cores. In general, though, your Eclipse instances will probably use relatively fewer resources (CPU, RAM, disk) than either the database or JBoss instances.
Overall, with five users plus some server-side applications that are known to be resource-greedy, you should look high-end. Without naming brands, something like: quad core, 24 GB of RAM or more, maybe an SSD or a fast hardware RAID array of HDDs.
Assuming the developers are physically located in the vicinity of the server, would it be feasible to set up a multi-seat box with multiple display/keyboard/mouse sets and assign a guest, keyboard, mouse and display head to each user? How would the software and hardware of this setup be architected?
First some front matter: here and here.
What you will quickly learn is that there are many options and there is no strong leader in this space. There isn't one obvious way that 99.9% of the people use. Some don't use virtualization at all. Some use multiple instances of Xorg. Some use Windows Multipoint Server. Some use ... you get the idea. It's definitely a feasible configuration, especially for only five users... the upside is that you don't have to have desktop PCs for each person, just a monitor/keyboard/mouse. The downside is that you have to have a beefier central server to support all the users, and the software configuration is more complex.
For a multiseat configuration, you'll need enough graphics cards so that you have enough ports for all the monitors you need. You'll also need a USB hub for all the keyboards and mice.
Be aware that once you commit to a multi-seat configuration, you will be making an investment in graphics cards (and possibly multi-seat software) that will tie you to having developers being physically located at the server. So if you decide later on to bring in another developer who works in another part of the world, they won't be able to (easily) join your existing setup by just pulling up a chair and bringing a keyboard/mouse/monitor. It can also be difficult to expand your setup to more developers once you hit your video card port limit.