The solution for warming up SharePoint

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.

image

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.

image

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.

image

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

Reply

Hi there,
The solution must be deployed for all webapplications or Central Administration?

Thanks,
TP

 

    René Hézser

    Reply

    To the central administration.
    René

     

      TPimpao

      Reply

      And the timerjob will work correctly in all frontends?

      Thanks,
      TP

       

        René Hézser

        Reply

        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

Reply

Forget, its working after restarting the TimerJob service in all FE servers

🙂

 

    René Hézser

    Reply

    Thank you for the feedback.

     

BigE

Reply

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

    Reply

    Did you deploy to the Central Administration WebApplication?
    Does the message appear in the browser, or in the ULS-Logs?

    René

     

      BigE

      Reply

      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

Reply

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

    Reply

    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é

     

Leave a Reply