[技術探討]探討IIS 8的預先載入設定

IIS8preload
在為客戶進行客製化簡訊應用系統專案時,網站採用ASP.NET開發,掛載在IIS上,於是會遇到一個常見的狀況:第一個登入系統的人要等比較久的時間才能看到回應的網頁,IIS 8之後也提供了預先載入的設定,依照網路上查到的設定方式設定後,卻依然收到客戶反映第一個登入的使用者回應時間過久的問題。本篇文章則是探討IIS上的預先載入相關設定與適用情況。

首先介紹IIS上與預先載入有關的設定,分成三大類,第一類在安裝IIS功能時,要勾選『網頁伺服器』→『應用程式開發』→『應用程式初始化』

接下來點選網站或應用程式所套用的應用程式集區,於動作方格點選『進階設定…』

IIS 8的預先載入

將『啟動模式』設為AlwaysRunning

IIS 8的預先載入

再點選網站或應用程式,於動作方格點選『進階設定…』

IIS 8的預先載入

將『預先載入已啟用』設定為True

IIS 8的預先載入

註1:易犯錯誤:IIS安裝時未勾選『應用程式初始化』,此時介面上仍可設定應用程式集區的『啟動模式』為AlwaysRunning與網站或應用程式的『預先載入已啟用』,但進行測試後發現並沒有達到預先載入的效果。

第二類設定是點選網站或應用程式的『功能檢視』頁簽的『設定編輯器』

IIS 8的預先載入

將『區段』選到system.webServer/applicationInitialization,並確認『來源』是要設定預先載入的網站或應用程式.Web.Config後,將『doAppInitAfterRestart』設為True

IIS 8的預先載入

接下來點選『(集合)』的『…』按鈕,設定程式初始化時的Request路徑於參數『initializationPage』內

IIS 8的預先載入

第三類設定則又回到應用程式集區的『進階設定…』,將『閒置逾時動作』設為Suspend

IIS 8的預先載入

IIS設定分成三類,測試情境也分成三種,第一個情境是將應用程式集區回收後等數秒鐘,再測試使用者登入網站,網頁回應的時間。

這邊使用Console指令將應用程式集區回收:

%windir%\system32\inetsrv\appcmd\appcmd recycle apppool /apppool.name:[應用程式集區名稱]

IIS 8的預先載入

網頁回應的時間則是抓IIS Log(C:\inetpub\logs\LogFiles\W3SVC?\*.log)的time-taken時間(單位為毫秒)

IIS 8的預先載入

第二個情境是將IIS重啟後等數秒鐘,再測試使用者登入網站,網頁回應的時間。

在此也使用Console指令將IIS重啟:iisreset

 

第三個情境則是使用者登入網站後,不再操作,直到超過應用程式集區的閒置逾時(分)時間(預設值是20分鐘),應用程式集區被IIS回收後等數秒鐘,再測試使用者登入網站,網頁回應的時間。

註2:驗證應用程式集區是否因逾時被回收,可看事件檢視器的系統,來源WAS,事件識別碼為5186。

IIS 8的預先載入

註3:只有當應用程式集區的閒置逾時時間設成Terminate,才會看到事件5186發生。

 

下列是將三類設定的搭配組合加上三種測試情境的結果:

啟動為AlwaysRunning且預先載入已啟用啟用doAppInintAfterRestart閒置逾時時間為Suspend回應時間(毫秒)
AppPool回收VVV46
IISResetVVV31
閒置回收VVV1625
AppPool回收VVX62
IISResetVVX31
閒置回收VVX46
AppPool回收VXV46
IISResetVXV62
閒置回收VXV109
AppPool回收VXX31
IISResetVXX15
閒置回收VXX78
AppPool回收XVV3921
IISResetXVV4609
閒置回收XVV94
AppPool回收XVX3890
IISResetXVX4578
閒置回收XVX4172
AppPool回收XXV24983
IISResetXXV4250
閒置回收XXV93

 

結論:

  1. 要達到使用者在無論哪種原因導致應用程式集區被回收,都可以快速拿到網站回應結果,採用第一類設定即可,但要記得檢查IIS有安裝『應用程式初始化』
  2. 若不打算設定預先載入,又不希望太常發生使用者回應時間過久的問題,可採用第三類設定,這樣只有IIS剛重啟時,會比較久,平常應用程式集區並不會被頻繁回收。
  3. 目前尚未找到第二類設定在何時間點可以發揮作用。

Ref: https://blogs.msdn.microsoft.com/msdntaiwan/2014/04/15/iis-asp-net-iis/

Ref: https://kknews.cc/zh-tw/tech/p496byj.html

Ref: http://kreelbits.blogspot.tw/2015/07/iis-application-initialization-quick.html

 

 


發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料