This one feature could be reason enough to upgrade to Windows Server 2008 R2 and IIS 7.5 when running SharePoint. The unique ability to warm up memory cache while still serving users is something no basic scripting can achieve. Please note: IISRESET seems to kill all workers and perform a classic flush followed by a warm up (brief outage). However, INETMGR “recycle” on a single pool triggers the warm up in parallel for a zero outage experience. Below is a diagram of my understanding of how this all works. It’s not from TechNet … but hey … my budding art skills need more practice.
How to configure
- Download x64 MSI from http://www.iis.net/download/ApplicationWarmUp
- Login to Windows 2008 R2 as local admin and install
- Open INETMGR and browse to the website that needs warm up
- Open Application Warm-Up feature icon
- Click Add Request and give the relative URL to the homepage ASPX (without / prefix)
- Click Settings and check both boxes
- Click Edit User Context, select “Set Username and Type only”, and provide Windows credentials. This doesn’t have to be the farm account, but that’s what I used for simplicity. Anyone with Read permission should work.
How to test
- Open Internet Explorer to the homepage ASPX
- Open CMD and Task Manager side-by-side
- Type “IISRESET” and press enter
- Type “APPCMD LIST WP” and press enter
- Type “IISRESET” and press enter again
- Refresh IE while watching Task Manager.
You’ll see a new PID (process identifier) number for the newly created W3WP worker process. The IE page should continue to load instantly without delay. By running “APPCMD LIST WP” again you will see a new PID for the application pool. The warm up feature has successfully created and warmed up a new worker thread without any outage. The only downside I can foresee is the need for more RAM. Running parallel W3WP threads requires more physical memory during the full process (recycle / warm up / release).