1. 程式人生 > 其它 >如何設定IIS程式池的回收時間,才能最大程度的減少對使用者的影響?

如何設定IIS程式池的回收時間,才能最大程度的減少對使用者的影響?

------------恢復內容開始------------

如何設定IIS程式池的回收時間,才能最大程度的減少對使用者的影響?

作為.Net開發人員,其實對IIS的應用程式池知之甚少,在工作中我也有幾次遇到過網站無故打不開的情況,找了半天原因也找不到是怎麼造成的,有一次我給網站換了一個應用程式池後發現就能正常訪問了,這也讓我對辨別是問題產生了好奇和疑問,於是開始找這方面的一些資料,原來IIS的應用程式池一般預設都會自動回收的,預設有29個小時回收一次,所以很多時候因為不是上班時間我們沒有遇到過,那麼對於網際網路web應用,如何在使用者毫無感知的情況下回收程式池?(對使用者產生最小的影響)

簡單理解IIS應用程式池

應用程式池可以看成是裝載計算機分配給Web應用程式的記憶體的容器。

網路上有人這樣比喻:如果記憶體是水,那麼應用程式池就是魚缸,Web應用程式就是魚缸裡的金魚。多個Web應用程式可以放在同一個應用程式池裡面,也就是說一個魚缸可以養多條金魚。如果金魚多了,魚缸的的空間有限,那麼金魚之間就會爭搶生存空間,不是很堅固的魚缸就會破裂,所有的金魚(網站)就會受到影響,即記憶體不足,造成記憶體溢位的問題。如果時間久了,魚缸裡面的水質就會變差,金魚就好像生活在臭水溝裡,因此我們需要定期換水(回收程式池)。

程式池自動回收優化

IIS的程式池預設回收間隔是1740分鐘(29小時),在自動回收過程中,應用程式池將會清空,保留在記憶體中的資料將會被清理(相當於IIS重啟)。對於網際網路應用程式,為了減少資料庫伺服器的負擔,也許會選擇將大量資料暫存在記憶體中,回收會造成記憶體資料丟失,如果沒有及時儲存到資料庫中,可能導致應用程式出問題。如果遇到系統使用高峰期,回收將可能導致一段時間應用程式無響應(出現假死狀態),給予使用者一種很不好的體驗。 在優化應用程式池之前,我們應用先了解下程式池的幾個配置資訊:



發生配置更改時禁止回收:如果為True,應用程式池在發生配置更改時將不會回收。
固定時間間隔(分鐘):超過設定的時間後,應用程式池回收,為0意味著應用程式池不會按固定間隔回收。 系統預設設定的時間是1740分鐘(29小時)。
禁用重疊回收:如果為true,將發生應用程式池回收,以便在建立另一個工作程序之前退出現有工作程序。
請求限制:應用程式池在回收之前可以處理的最大請求數。如果值為0,則表示應用程式池可以處理的請求數沒有限制。
生成回收事件日誌條目:每發生一次指定的回收事件時便產生一個事件日誌條目,裡面的明細設定不一一介紹。

問題分析:每1740分鐘(29小時)回收一次是否合理?

不太合理,這個週期內,有可能應用程式處於訪問高峰期。因為每天的回收時間都是不一樣的,很有可能在高峰期回收,就會造成短時間內網站訪問出現問題。因此,要避免最大程度的減少對使用者的影響,我們需要充分的分析應用程式的訪問情況,例如哪個時間段是高峰,哪個時間段訪問人數最少。瞭解到這些後,應用程式部署人員就應該設定固定的回收時間,例如一個網站凌晨兩點訪問人數是最少的,那麼它可以設定“特定回收時間”在凌晨兩點,應用程式池裡面的特定時間是支援設定多個的,請注意。

一、選擇每天凌晨2點回收

二、每週週六深夜回收

我們推薦採用windows “任務計劃程式”配置一個作業系統定時任務執行指令碼程式來實現IIS回收,設定方便,也可以靈活調整。 要通過指令碼執行IIS的功能,需要在IIS安裝配置的時候,勾選上管理工具中的“IIS管理指令碼和工具”(見下圖)。

用vbs指令碼及批處理檔案,結合任務計劃程式,保證在每週六深夜1點執行IIS回收。

Recyclepool.vbs檔案內容:

appPoolName = WScript.Arguments(0)

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='" + appPoolName + "'")

oAppPool.Recycle

set fso=createobject("scripting.filesystemobject")

if (fso.fileexists("d:\appPool\recycleIISPool.log")) then

'1-forreading,2-forwriting,8-appending

set file=fso.opentextfile("d:\appPool\recycleIISPool.log",8,ture)

else

set file=fso.createtextfile( "d:\appPool\recycleIISPool.log",8,ture)

end if

'write(x)寫入x個字元,writeline寫入換行,writeblanklines(n)寫入N個空行

file.writeline now&" 應用程式池“"&appPoolName &"”已經回收成功。"

file.close

Recyclepool.bat檔案內容:

cscript D:\appPool\recyclepool.vbs platweb

用vbs指令碼及批處理檔案,結合任務計劃程式,保證在每週六深夜1點執行IIS回收。

成功用windows計劃任務解決IIS定時回收問題。

文章轉自:https://www.cnblogs.com/sky6699/p/7124615.html

------------恢復內容結束------------