做爲.Net開發人員,其實對IIS的應用程序池知之甚少,在工做中我也有幾回遇到過網站無端打不開的狀況,找了半天緣由也找不到是怎麼形成的,有一次我給網站找了一個程序程序池後發現就能正常訪問了,這也讓我對辨別是問題產生了好奇和疑問,因而開始找這方面的一些資料,原來IIS的應用程序池通常默認都會自動回收的,默認有29個小時回收一次,因此不少時候由於不是上班時間咱們沒有遇到過,那麼對於互聯網web應用,如何在用戶毫無感知的狀況下回收程序池?(對用戶產生最小的影響)web
應用程序池能夠當作是裝載計算機分配給Web應用程序的內存的容器。數據庫
網絡上有人這樣比喻:若是內存是水,那麼應用程序池就是魚缸,Web應用程序就是魚缸裏的金魚。多個Web應用程序能夠放在同一個應用程序池裏面,也就是說一個魚缸能夠養多條金魚。若是金魚多了,魚缸的的空間有限,那麼金魚之間就會爭搶生存空間,不是很堅固的魚缸就會破裂,全部的金魚(網站)就會受到影響,即內存不足,形成內存溢出的問題。若是時間久了,魚缸裏面的水質就會變差,金魚就好像生活在臭水溝裏,所以咱們須要按期換水(回收程序池)。 windows
IIS的程序池默認回收間隔是1740分鐘(29小時),在自動回收過程當中,應用程序池將會清空,保留在內存中的數據將會被清理(至關於IIS重啓)。對於互聯網應用程序,爲了減小數據庫服務器的負擔,也許會選擇將大量數據暫存在內存中,回收會形成內存數據丟失,若是沒有及時保存到數據庫中,可能致使應用程序出問題。若是遇到系統使用高峯期,回收將可能致使一段時間應用程序無響應(出現假死狀態),給予用戶一種很很差的體驗。 在優化應用程序池以前,咱們應用先了解下程序池的幾個配置信息: 服務器
發生配置更改時禁止回收:若是爲True,應用程序池在發生配置更改時將不會回收。
固定時間間隔(分鐘):超過設置的時間後,應用程序池回收,爲0意味着應用程序池不會按固定間隔回收。 系統默認設置的時間是1740分鐘(29小時)。
禁用重疊回收: 若是爲true,將發生應用程序池回收,以便在建立另外一個工做進程以前退出現有工做進程。
請求限制: 應用程序池在回收以前能夠處理的最大請求數。若是值爲0,則表示應用程序池能夠處理的請求數沒有限制。
生成回收事件日誌條目: 每發生一次指定的回收事件時便產生一個事件日誌條目,裏面的明細設置不一一介紹。
網絡
不太合理,這個週期內,有可能應用程序處於訪問高峯期。由於天天的回收時間都是不同的,頗有可能在高峯期回收,就會形成短期內網站訪問出現問題。所以,要避免最大程度的減小對用戶的影響,咱們須要充分的分析應用程序的訪問狀況,例如哪一個時間段是高峯,哪一個時間段訪問人數最少。瞭解到這些後,應用程序部署人員就應該設定固定的回收時間,例如一個網站凌晨兩點訪問人數是最少的,那麼它能夠設置「特定回收時間」在凌晨兩點,應用程序池裏面的特定時間是支持設定多個的,請注意。 app
咱們推薦採用windows 「任務計劃程序」配置一個操做系統定時任務執行腳本程序來實現IIS回收,設置方便,也能夠靈活調整。 要經過腳本執行IIS的功能,須要在IIS安裝配置的時候,勾選上管理工具中的「IIS管理腳本和工具」(見下圖)。工具
用vbs腳本及批處理文件,結合任務計劃程序,保證在每週六深夜1點執行IIS回收。優化
Recyclepool.vbs 文件內容:網站 appPoolName = WScript.Arguments(0)spa 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定時回收問題。