My test environment is running on a single physical machine (64 GB RAM & i7-3930K) and I usually run like 14-20 VMs in the same time. I work a lot with SharePoint and my 2007, 2010 and 2013 farms are quite complex. I always configure my farms to support all the features (Search, Business Intelligence, Project Server, …) because whenever I want to test something I want to have everything ready.
In short I want to be able to use all the SharePoint features with 14 GB per SharePoint 2013 front-end/application server. You can run such setup without issues and have decent performance if you use Windows System Resource Manager (WSRM) and you configure it properly.
Just for fact – my personal VM (Windows 2012, AD, SharePoint 2013, TFS, MSSQL) is running smooth with only 10 GB RAM thanks to Windows System Resource Manager.
With WSRM I was able to run SharePoint 2013 + MSSQL on a single VM using only 6 GB. Of course when you have such low resources you definitely target a setup for development / test for under 10 users.
I also use WSRM in production environment. In fact WSRM is available starting with Windows Server 2003 (as a separate component) and is a Windows Server feature on Microsoft Windows Server 2008, 2008 R2 and 2012. In Windows Server 2012 WSRM is announced as being deprecated (still there and usable) and in Windows Server 2012 R2 was removed (but still functional – I will explain in a future article).
With WSRM I am able to configure the processes from each SharePoint server to run in the limits I specify. For example I want the processes associated to the Search Role (Search Service Application, noderunner.exe, mssdmn.exe, mssearch.exe) to run and be ready to be used anytime, but in the same time to use less resources compared with my SharePoint Web Applications (w3wp.exe processes). I want the interaction with my Web Applications (usually at least 3 per farm) to be fast (because this represents my 90% interaction with SharePoint) and the Search Role to be fully ready to be used, but to run in such way to not “eat” all my resources. Yes, I know about Set-SPEnterpriseSearchService, but WSRM does a better job and more than that can work with any kind of process (so no more frustration in case the application you use cannot be configured to use a maximum amount of memory and CPU).
SharePoint 2013 is a beast, it requires lots of resources to run and when your VM test environment was built for high availability you immediately understand that 64 GB RAM on a single physical machine are not enough if you don’t make the resource allocation more efficient.
How my WSRM setup looks for the SharePoint test env?
Process Matching Criteria
AppFabricCachingService – serves as an in-memory cache to store data accessed by applications, thereby improving application performance.
SPSearchV15NodeRunner – components (5 separate processes): Admin | Query Processing | Content Processing | Index | Analytic Processing.
SPSearchV15 – SharePoint Search Windows Service + SharePoint Crawl.
IISAppPool_w3wp – the replacement of IISAppPool. Matches all IIS App Pool worker processes.
SP_SYNC – IIS SharePoint SYNC WebApplication.
Usually IISAppPool_w3wp should be fine, but in case you want to change the process allocation for a specific web application, you can define the process matching criteria as presented bellow (just make sure into the Resource Allocation Policy it has a higher priority than IISAppPool_w3wp).
SPTimerV15 – sends notifications and performs scheduled tasks for SharePoint.
SPUserCodeV15 – executes user code in a sandbox.
Resource Allocation Policies
SharePoint_Working_Hours – Use it during production hours. Will provide optimal resource usage without too much caching or inefficient resource allocation.
SharePoint_Working_Hours_Relaxed – Use it when the system resources limitations are creating problems or when you expect the system to not be accessed by the users and you want to leave it to run its schedule maintenance tasks without restrictions.
SharePoint_Maintenance – Use it when the system resources limitations are creating problems or when you perform important configuration changes or maintenance.
This is the setup I found working excellent for my test environment that allows me to run at least 4 SharePoint VMs in parallel on my 64 GB RAM physical machine. As I mentioned a few times – always follow the Microsoft Recommendations in terms of production environment and plan your configuration with enough resources.