IIS應用程序池自動回收

一、IIS應用程序池自動回收問題的有效解決辦法

IIS可以設置定時自動回收,默認回收是1740分鐘,也就是29小時。IIS自動回收相當於服務器IIS重啓,應用程序池內存清空,所有數據被清除,相當於IIS重啓,在度量快速開發平臺服務器端,爲了減小數據庫負擔,內存中暫存了很多信息,不適合頻繁的回收,因爲回收會造成服務器端所有存在內存中的數據丟失,如果沒有及時保存到數據庫中,可能導致程序出現問題。而如果系統使用高峯時期,並不適合回收,回收可能導致幾十秒IIS無響應,對於正在工作的人員來說,是一種很不好的體驗,會以爲是網絡或者掉線等問題。因此,基於以上的分析,我們需要設置IIS在指定的時間內定時回收。
      度量快速開發平臺(以下簡稱:度量平臺)服務端搭建採用Webservice方式進行,這就需要正確的配置IIS(Internet Information Service)才能保證服務端可靠、穩定的運行,以給客戶提供更好的用戶體驗。IIS爲保護服務器資源,有一個應用程序池的回收功能,並且已經默認設置1740分鐘回收一次(29小時),爲了更好的設置該屬性,我們有必要對IIS回收功能設置進行掌握,並根據應用的實際情況配合調整,以達到系統運行的最佳效果。
IIS應用程序池回收,找到相應的應用程序池並點擊高級設置,就可以看到回收的相關設置(本文以windows2008R2下的IIS7爲例,Windows2012類似)。

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

    根據度量平臺服務端配置情況看,IIS默認設置的1740分鐘回收進程的策略並不合理,因爲每1740分鐘回收,在過程中可能就處於用戶使用系統的高峯時段,爲避免可能在高峯時段引起非可控問題,我們建議在每週六深夜(例如晚上1點,2點)進行IIS回收。

    如果我們在IIS應用程序池的高級設置中,進行回收設置,那麼只有兩種方式進行,一種是固定時間間隔,一種是手動回收。固定時間間隔設置,並不太好在深夜設置,以保證每週週六深夜執行回收。我們推薦採用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定時回收問題。

二、iis應用程序池自動回收

對於互聯網應用程序,爲了減少數據庫服務器的負擔,也許會選擇將少量數據暫存在內存中, 這樣隨着應用程序的運行,服務器的壓力會越來越大,這個時候就需要回收IIS應用程序池。

  IIS提供了自動回收時間間隔爲1740分鐘,或者如果一個網站在20分鐘內(IIS默認爲20分鐘)沒有客戶端訪問,服務器也會自動釋放IIS的應用程序池。

  一、設置iis應用程序池自動回收的時間間隔

  1、打開IIS管理界面,如下圖

2、點擊“應用程序池”,從右側應用程序池列表中選擇要設置的應用程序池,點擊右鍵,選擇“高級設置...”,打開如下界面:

二、程序池自動回收優化

  對於互聯網應用程序,爲了減少數據庫服務器的負擔,也許會選擇將大量數據暫存在內存中,回收會造成內存數據丟失,如果沒有及時保存到數據庫中,可能導致應用程序出問題。如果遇到系統使用高峯期,回收將可能導致一段時間應用程序無響應(出現假死狀態),給予用戶一種很不好的體驗。

因此,要避免最大程度的減少對用戶的影響,我們需要充分的分析應用程序的訪問情況,例如哪個時間段是高峯,哪個時間段訪問人數最少。瞭解到這些後,應用程序部署人員就應該設定固定的回收時間,例如一個網站凌晨兩點訪問人數是最少的,那麼它可以設置“特定回收時間”在凌晨兩點,應用程序池裏面的特定時間是支持設定多個的。

三、解決IIS7、IIS7.5 應用程序池回收假死的方法

最近我有一臺Windows 2008服務器老是出現IIS假死,上面的網站老是無法訪問,有時重啓IIS就能解決,然後就查看IIS的事件,寫着爲應用程序池的工作進程因不活動而被關閉。應用程序池超時配置被設置爲 20 分鐘。需要時將啓動一個新工作進程,發現好多網站都有類似這樣的事件。最終找到了一個解決方法,拿來做個備忘。

具體做法就是打開應用程序池——高級設置 ——將“禁止重疊回收”選項改爲“true”即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章