如何對SharePoint網站進行預熱(warmup)以提高響應速度


問題描述

SharePoint Server是一個易於使用的協作平台,目前在越來越多的企業中被應用開來。SharePoint Server是通過網站的形式向最終用戶提供服務的,而這個網站是基於ASP.NET 的技術實現的。由於ASP.NET技術的特點,網站啟動之后,頁面在第一個用戶第一次訪問的時候,會需要進行所謂的JIT 編譯,而這個時間,對於該用戶來說,可能會顯得有點長。這也是大家普遍反映的問題,為什么第一次要比較慢,而以后就較快了。

另外,由於ASP.NET網站會使用到應用程序池的技術,而應用程序池會定時或者不定時地進行回收。回收之后的網站,如果再次訪問,那么又會發生JIT編譯。這就是為什么有些用戶反映說,為什么之前都比較快,而突然第二天又慢了,然后又快了。

 

解決方案

對於SharePoint網站的優化,如果從系統角度來說,是有很多方面的。我在以前的一篇文章中(http://www.cnblogs.com/chenxizhang/archive/2011/11/13/2246958.html)提到過幾點建議(請參考該文的結尾處)。但我今天要談一下的是,如何在不改變網站結構和設計的前提下,采用一些輔助手段,對網站進行預熱(warm up),以便能達到提高響應速度的目的。

預熱的原理,其實很簡單,既然說ASP.NET的頁面第一次的JIT編譯是無法避免的,那么能否在第一個用戶第一次訪問之前,就通過某種方式去請求這個頁面,使得其編譯過程提前發生,這樣在用戶真正來訪問的時候,由於頁面已經編譯好了,所以就能直接使用。

有這樣的思路之后,我們就會想怎么來做到呢?

第一個方案是通過腳本的方式來實現

請參考下面這篇文章,作者介紹了一個Powershell腳本,用來對網站

SharePoint 2007, 2010 or 2013 Application Warm-up Script

http://gallery.technet.microsoft.com/office/SharePoint-2007-2010-or-d1884b4b

 

使用這個腳本的方式,你可以將腳本保存為一個ps1文件,例如如果你是使用SharePoint 2010,則可以將下面這段保存為一個文件

cls 
 
function get-webpage([string]$url,[System.Net.NetworkCredential]$cred=$null) 
{ 
$wc = new-object net.webclient 
if($cred -eq $null) 
{ 
$cred = [System.Net.CredentialCache]::DefaultCredentials; 
} 
$wc.credentials = $cred; 
return $wc.DownloadString($url); 
} # end Function 
 

foreach ($WebApp in (Get-SPWebApplication -IncludeCentralAdministration)) 
{ 
    $sites = $WebApp | Get-SPSite | get-spweb -Limit 15   
     foreach($site in $sites) 
     { 
     write-host "Warming up " $site.Url 
     $html= get-webpage -url $site.Url -cred $cred  
     $site.Dispose(); 
     }    # end loop for each sites 
 
 }    # end foreach web app 
  

然后打開SharePoint 2010 Management Shell,運行這個ps1文件(注意,是ps1,而不是psl)

我這邊運行的效果如下

image

該腳本運行之后,我再去訪問上面列出的網站,就幾乎無需等待,馬上可以看到頁面。

 

上面提到的方式是手工地運行腳本,那是否有辦法定時自動地運行這個腳本呢?當然可以,只要你稍微掌握一些Powershell的概念,我們可以結合Windows自帶的“任務計划”組件來實現自動化調度。

首先,我們需要在這個腳本的頂部添加一句腳本:

Add-PsSnapin Microsoft.SharePoint.PowerShell

這句話的作用是將SharePoint的管理命令添加到Powershell。

然后,在控制面板中的任務計划中,添加一個定時的任務

image

image

image

image

image

image

【備注】這里的Program路徑如下,請替換掉紅色部分  C:\WINDOWS\System32\WindowsPowerShell\v1.0\PowerShell.exe -Version 2   "d:\training\moss2010\warmup.ps1"

image

另外,由於該任務是自動運行的,請將下面兩個選項選中

image

 

 

第二個方案是結合IIS 的一個新模塊來實現

 

上面這種用腳本的方式看起來很不錯,不是嗎?除此之外,我們還有一種服務器端的解決方案。因為SharePoint網站是被宿主在IIS這個服務器里面的,微軟也針對我們提到的這類問題改進了IIS。

在IIS 7(7.5)中,需要單獨安裝一個模塊

Warm up your SharePoint Web Applications on Windows 2008 R2 using the IIS 7.5 Application Warm-Up module

http://sharepointgeorge.com/2010/warm-sharepoint-web-applications-windows-2008-r2-iis-75-application-warmup-module/

 

如果使用IIS 8.0,則這個模塊已經內置在IIS中了,關於如何使用,請參考

IIS 8.0 Application Initialization

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization

 

需要注意的是,雖然我們這篇文章討論的是關於SharePoint網站的預熱,但實際上以上兩個方案對於其他網站也是適用的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM