Iis-7

如何在 IIS 7.0 中最有效地為 ASP.NET 站點實現“喚醒腳本”

  • December 8, 2014

我有一個 SharePoint 站點和一個自定義 ASP.NET 站點,它們都位於 IIS 7.0 中。我正在嘗試在應用程序池每天早上回收後實現喚醒機制,以記憶體應用程序池並避免我們都非常熟悉的第一次命中延遲。我已經使用下面的腳本在任務調度程序中安排了一個任務,如果我回收應用程序池並執行該任務,站點會立即出現。我已經多次模擬了這個(甚至通過命令行執行腳本,並且腳本肯定會喚醒站點)。但是,當我讓任務按計劃(凌晨 4 點)執行,然後在早上 8 點訪問 ASP.NET 站點時,第一次訪問時需要 10-15 秒才能喚醒站點。SharePoint 網站似乎在早上很快就出現了。我嘗試將超時空閒的 IIS 設置更新為 24 小時(它’ s 預設為 20 分鐘)以查看應用程序池是否在 ASP.NET 站點喚醒後再次自行回收。此外,應用程序初始化直到 7.5 才可用(在這種情況下我們被困在 7.0 上)。有什麼建議麼?

注意:SharePoint 網站在凌晨 3:30 回收 ASP.NET 網站在凌晨 3:30 回收 喚醒任務在凌晨 4 點執行

喚醒腳本:

# urls to wakeup
$urls = "<url-1>",
       "<url-2>"

try 
{
   # loop through urls
   foreach($url in $urls)
   {
       Write-Host "$url waking up..." -foreground yellow

       # wakeup url by fetching page
       $client = new-object system.net.WebClient
       $client.UseDefaultCredentials = $true
       $null = $client.OpenRead($url)
       $client.Dispose()

       Write-Host "$url now awake..." -foreground green
   }
} 
catch 
{
   # exception thrown
   Write-Error $_
   throw $_
}

立即解決此問題的最簡單方法可能只是將腳本執行的時間間隔增加到每小時或每半小時。

但這並不能滿足了解實際情況的需要。不幸的是,我手邊沒有任何 IIS 7.0 機器或虛擬機。但我的直覺說,應用程序池設置中仍有一些東西會導致它們減速。另一種可能性是一個或多個 ASP.NET 應用程序崩潰。

引用自:https://serverfault.com/questions/649965