The solution for warming up SharePoint
Most SharePoint Farms will have a solution for the long loading time after an Application Pool recycle or iisreset running. There are many different ways to preload websites, so your users have faster load times. So why another solution?
There are some questions, that I think have not been dealt with before:
- Most solutions require some sort of Timer to be started (e.g. a Scheduled Task)
- When should the warmup occur?
- What about multiple WebFrontend Servers?
- How about Claims support?
- Which URLs have to be called? What about extended WebApplications?
- New WebApplications require the warmup tool to be adjusted
- Manuell warmup after Deployments
- What about search?
- Did the Farm warmup correctly?
Years ago I developed a console application, which warms up SharePoint by calling each Site within a SiteCollection. It has bee updated multiple times with new features.
Basis of the new solution still is the “old” application. It has been integrated into the SharePoint Central Administration and the SharePoint Timer job. That way it can be configured through an Application Page and is executed by the SharePoint Timer on each WebFrontend Server. The Solution has been tested with SharePoint 2010 and 2013.
A Custom Action displays a new link within the “Monitoring” Section of the Central Administration.
All WebApplications are listed, and can be configured separately. The time the Application Pools recycles is read from IIS and will be set as default time (+ 1 minute). That way you can assure fast pages even shortly after the daily recycle.
A manual warmup can be started through the Timerjob page, or by downloading and executing a batch file (has be be executed on each farm server).
If you select to write to the EventLog, each execution of a job will write a summary to the Application Log. If all Websites could be loaded without a problem, the Event ID will be 0. Otherwise 1.
The tool supports Claims WebApplications with Windows Authentication.
The download package contains two WSPs. One for a SharePoint 2010 farm, and the other for 2013.
Download: Download WSP Packages, Sources
Update November 11, 2014
- Please restart the SharePoint Timer service on all farmservers after intalling the solution
13 Comments
TPimpao
Hi there,
The solution must be deployed for all webapplications or Central Administration?
Thanks,
TP
René Hézser
To the central administration.
René
TPimpao
And the timerjob will work correctly in all frontends?
Thanks,
TP
René Hézser
I hope so 😉
At least that is the way the solution is supposed to work.
René
TPimpao
Thanks René!
TPimpao
Hi again,
Deploying the solution only to the Central Administation the timerjob don’t work on FE servers:
Cannot find the type assembly RH.Warmup.
The type RH.Warmup.TimerJob.WarmupJob, RH.Warmup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=04b24f1ba76abf90 could not be found in its specified assembly. Scanning all assemblies that have been loaded in the current app domain.
SharePoint cannot deserialize an object of type RH.Warmup.TimerJob.WarmupJob, RH.Warmup, Version=1.0.0.0, Culture=neutral, PublicKeyToken=04b24f1ba76abf90 on this machine. This typically occurs because the assembly containing this type is not installed on this machine. In this case, this message can be safely ignored. Otherwise, the assembly needs to be installed on this machine in a location that can be discovered by the .NET Framework.
Any clue?
Thanks,
TP
TPimpao
Forget, its working after restarting the TimerJob service in all FE servers
🙂
René Hézser
Thank you for the feedback.
BigE
SP Foundation 2013. Everything installed without problem, and bounced the WFE. But when launching from Central I get this error: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure “Resources.RH.Warmup.resources” was correctly embedded or linked into assembly “App_GlobalResources.p5delpi8” at compile time, or that all the satellite assemblies required are loadable and fully signed. Any idea what’s going on? Thanks! E
René Hézser
Did you deploy to the Central Administration WebApplication?
Does the message appear in the browser, or in the ULS-Logs?
René
BigE
Thank you for helping René! Yes, I deployed in Central Admin, and it went well. I see it when I ‘Manage Farm Features”, and the status is “Active”.
When I try to use it by going to Monitoring, Time Jobs, Configure Warmup, I get the standard “Sorry, something went wrong” error in the browser, with the text above. Correlation ID: 0e21df9c-9861-50fa-c9b9-7fe2679fc3cb.
Here is the error from the ULS Logs: System.Resources.MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure “Resources.RH.Warmup.resources” was correctly embedded or linked into assembly “App_GlobalResources.p5delpi8” at compile time, or that all the satellite assemblies required are loadable and fully signed. at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName) at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark) at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark) at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents) at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream) at System.Web.Compilation.ResourceExpressionBuilder.GetResourceObject(IResourceProvider resourceProvider, String resourceKey, CultureInfo culture, Type objType, String propName) at Microsoft.SharePoint.Search.SPSatelliteResourceExpressionBuilder.GetResource(String classKey, String resourceKey) at ASP._admin_rh_warmup_configurewarmupjob_aspx.__BuildControlPageTitle(Control __ctrl) at System.Web.UI.MasterPage.InstantiateInContentPlaceHolder(Control contentPlaceHolder, ITemplate template) at ASP.SEATTLE_MASTER_1802710575.__BuildControlPlaceHolderPageTitle() at ASP.SEATTLE_MASTER_1802710575.__BuildControl__control9() at ASP.SEATTLE_MASTER_1802710575.__BuildControl__control2() at ASP.SEATTLE_MASTER_1802710575.__BuildControlSPHtmlTag() at ASP.SEATTLE_MASTER_1802710575.__BuildControlTree(SEATTLE_MASTER_1802710575 __ctrl) at System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) at System.Web.UI.Page.ApplyMasterPage() at System.Web.UI.Page.PerformPreInit() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Stefan Unterweger
Hello!
A question.
We have extended webapplications in use.
Unfortunately, this solution takes only the default URL of a Web application, not the URL of the extended Web application.
Is it possible to change this?
Thanks!
René Hézser
Hi Stefan,
if I understand you correctly, the current AAM should be respected while generating URLs?
I suppose this can be done. I’ll see when I can do this.
René