Имеется проблема с быстрым переходом по страницам в начале рабочего дня. На главной странице находится только меню (множество ссылок) на другие страницы с библиотеками документов. При первом нажатии на каком-либо пункте меню идёт долгая загрузка, примерно 20-30 секунд, причём другие серверы от MS (Skype for Business, SCCM, SCDPM, SQL-server) работают нормально. Повторные заходы на главную страницу корпоративного сайта уже происходят быстро!

Оказалось, что по ночам пулы приложений IIS, в которых размещены компоненты портала, перезапускаются. Решением является использование разогревочных скриптов, которые позволяют сэмулировать первый запуск приложений.

Пример 1.

https://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=404

Add-PsSnapin Microsoft.SharePoint.PowerShell -erroraction silentlycontinue

Get-SPWebApplication | ForEach-Object { Invoke-WebRequest http://srv-spoint/sites/docs -UseDefaultCredentials -UseBasicParsing }

Рисунок 1. Отображение работы скрипта1.

 

Пример 2.

https://blogs.technet.microsoft.com/scottstewart/2014/09/29/warm-up-script-for-web-front-end-servers-wfe-in-load-balanced-sharepoint-farms/

Add-PsSnapin Microsoft.SharePoint.PowerShell -erroraction silentlycontinue
 function get-webpage([string]$url,[System.Net.NetworkCredential]$cred=$null)
 {
   $bypassonlocal = $false
   $proxyuri = "http://" + $env:COMPUTERNAME
   $proxy = New-Object system.Net.WebProxy($proxyuri, $bypassonlocal)
   $wc = new-object net.webclient
   $wc.Proxy = $proxy
   if($cred -eq $null)
   {
     $cred = [System.Net.CredentialCache]::DefaultCredentials;
   }
   $wc.credentials = $cred;
   return $wc.DownloadString($url);
 }
 $cred = [System.Net.CredentialCache]::DefaultCredentials;

## This can be used if required to force using certain credentials
 #$cred = new-object System.Net.NetworkCredential("username","password","machinename")
 
#Get the Web Apps
 $apps = get-spwebapplication # -includecentraladministration (Central admin is not included as it is not running on my WFE Server)
 
 foreach ($app in $apps) {
   #Get the Site Collections
   $sites = get-spsite -webapplication $app.url -Limit All
  
   ### UNCOMMENT THE 2 LINES BELOW IF YOU ONLY WANT TO USE THIS AT SITE COLLECTION LEVEL - Not required if Sites are warmed up.
   #write-host $app.Url;
   #$html=get-webpage -url $app.Url -cred $cred;

    ###COMMENT OUT BETWEEN THE "=======" IF THERE ARE TOO MANY WEBs i.e. Sites and you don't want to warm them up.
   #==================
    foreach ($site in $sites) {
      foreach ($web in $site.AllWebs) {
      #get the webs i.e. Sites
          write-host $web.Url;
          $html=get-webpage -url $web.Url -cred $cred;
     }
    }
    #=================
 }

Рисунок 2. Отображение работы скрипта2.

После проверки работы скриптов один из них добавляем в расписание. Для этого заходим в Start->Control Panel->Administrative Tools->Task Sheduler, справа нажимаем Create Basic Task, даём имя, выбираем периодичность Daily (каждый день), устанавливаем время начала срабатывания и частоту повторов (см. рис. 3).

Рисунок 3. Настройка расписания.

На следующем шаге мастера выбираем Start a program, указываем место размещения (путь) скрипта, Finish.

Чтобы просмотреть настройки или что-то изменить, нужно сделать двойной клик левой кнопкой мыши на появившемся задании, затем на нём нажать правой кнопкой мыши и в контекстном меню выбрать Properties. В некоторых вкладках будет наличие кнопки Edit (см. рис. 4).

Рисунок 3. Изменение параметров.

Подробнее о планировщике задач можно почитать тут https://www.xelent.ru/blog/nastroyka-planirovshchika-zadaniy-windows-server-2016/ .