[技術探討]IIS管理技巧與問題排除

IIS管理技巧

作為提供銀行信用卡消費簡訊通知服務的簡訊發送平台,最重要的其中一項任務就是24小時服務都不能中斷,但曾經發生客戶反應網站每隔一段時間就會有幾分鐘無法連線,而查看主機本身仍是正常運作,到底發生甚麼事了呢? 原來是IIS設定的問題,魔鬼藏在細節裡,這篇文章就來討論 IIS管理技巧 跟問題排除吧。

當我們點選任意一個網站的應用程式集區,再點選編輯應用程式集區裡的「回收…」,可看到其預設的回收時間間隔為1740分鐘,也就是說每隔29小時,應用程式集區就會停掉重啟,而停掉重啟時間可能需要數分鐘,也就造成前述網站無法服務的原因。

IIS管理技巧

如果要設定應用程式集區要利用網站低使用率的時間回收,則可依照下述步驟設定:

1.取消勾選固定時間間隔,改勾選特定時間,並輸入希望回收的時間:例如上午 11:50

IIS管理技巧

2.下一步,勾選「排定的時間」(勾選後,此回收事件才會被記錄到事件檢視器裡,提供問題排除的參考),並按下完成按鈕。

IIS管理技巧

另一種設定方式則是從編輯應用程式集區裡的「進階設定…」進去。

IIS管理技巧

展開「回收」項目裡的「特定時間」與「產生回收事件記錄項目」,並設定其內容。

IIS管理技巧

依據上述方式設定後,每天在設定回收的時間,可以在事件檢視器的系統分類下看到下列記錄:處理序識別碼為 %1 且服務應用程式集區 %2 的工作者處理序已要求回收,因為它已達到排定的回收時間。

IIS管理技巧

另一個要注意的設定是「進階設定」→「處理序模型」→「閒置逾時(分)」。ASP.NET的開發人員應都知道IIS預設Session Timeout時間為20分鐘,所以如果假設網站有需求是使用者超過120分鐘沒操作時才將其登出的話,會要去Web.Config調整sessionState timeout的時間,如<sessionState timeout=”120″ />。或是去調整「站台」→「工作階段狀態」→「逾時(分鐘)」。

IIS管理技巧

IIS管理技巧

然而設定完後還是會聽到使用者反應明明才剛登入,怎麼就被登出了?原來就是「應用程式集區」裡的「閒置逾時(分)」沒有一起調整成120分鐘。

IIS管理技巧

那麼站台的「逾時(分鐘)」( sessionState timeout)與應用程式集區的「閒置逾時(分)」( idle timeout )差別在哪裡?為何要分兩個地方設定?

個人感覺是站台的sessionState timeout的功用在記錄Session有無持續在使用,若超過時間,則讓此Session失效無法再使用;例如事件檢視器→應用程式,會看到下列錯誤訊息:「要求的表單驗證失敗。原因:提供的票證已經逾期。」

IIS管理技巧

而應用程式集區的idle timeout則是當網站所使用的應用程式集區在設定的時間內都無任何連線進來使用,就會終止此應用程式集區。也因此當sessionState timeout時間(例如120分鐘)大於idle timeout(例如20分鐘) 時,就會發生明明Session還未失效,可是使用者超過20分鐘才操作網頁時卻發生Session不存在導致程式出錯的狀況;如果回頭看事件檢視器→應用系統,會看到下列錯誤訊息:「處理序識別碼為 %1 且服務應用程式集區 %2 的工作者處理序因為非使用而關閉。應用程式集區逾時設定為 20 分鐘。需要時會啟動新工作者處理序。」

IIS管理技巧

最後補充說明:應用程式集區的idle timeout除了設成跟sessionState timeout值一樣外,也可以選擇設成0,這樣的設定表示讓應用程式集區不要因為閒置就回收,同樣可避免上面的問題發生。

 

 


發佈留言

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