Virtualised Citrix XenApp servers using VMware
As many organisations are still running Citrix 4.5 on physical Windows Server 2003 moving to XenApp 6.5 or even VDI with XenDesktop 7 is a natural step. This is especially true as application and infrastructure servers have probably already been virtualised. And it’s no secret, using VMware vSphere for hosting Citrix XenApp and Terminal Server/Remote Desktop Services offers many benefits:
- Rapid deployment using VMware automation enabling scalability
- High availability and disaster recovery capabilities in-tune other hosted servers
- Better integration with storage infrastructure
- Improved management capabilities
There’s two ways to think about XenApp server capacity planning – fewer big servers, or more smaller servers. I prefer smaller servers and using virtualisation is ideal for this approach. So when virtualising Xenapp 6.5 servers we first need to determine the optimal number of XenApp servers per each vSphere host.
How many vCPUs should I assign?
With CPU hyper-threading switched on. Divide the total number of host logical cores by the number vCPUs assigned to each virtual XenApp server. For example, an ESX host with 32 virtual cores would host 8 virtual XenApp servers (32 / 4 = 8). Note: As performance increase is not linear, more than 2 vCPUs is a waste so my advice is stick with 2.
How much vMemory should I use?
Virtual memory assigned per virtual XenApp server really depends on user workload to be supported. I like to have a bit in reserve. So I don’t calculate on light users, but I consider all my users to be Normal and needing 512MB each. So if hosting 24 Normal user sessions per XenApp VM we’ll need (24 x 512) = 12,228MB or 12GB memory allocated to each XenApp VM.
How many users can I host per virtual XenApp server?
The amount of Normal users hosted per each XenApp server works out at between 20 and 24. This figure has been arrived at through experience. Also, its been found that dual socket servers perform better than quad socket servers as adding extra sockets doesn’t scale linearly.
Putting it all together
Using vSphere to host XenApp we can use the following optimal server configurations:

What about the IOPs?
For Normal users at steady state I advise 4 IOPs per user. So each XenApp server with 24 users requires (24 x 4) = 96 IOPs. Rounded up gives us 100 IOPs per XenApp VM. If hosting 8 XenApp VMs we’ll need (8 x 100) = 800 IOPs delivered to each ESX host from our storage infrastructure.
So there you have it. Using dual socket hosts we can support up to 10 XenApp VMs and up to 240 normal users per ESX host. Now take what I’ve written here as a guide. You still need to perform your own design validation and testing based on you actual user and application workloads. But at least this should get you started.