轉自:http://www.safe5.com/html/jishuzixun/2009/1028/5500.html
IIS6.0應用程式集區回收和背景工作處理序
公司的一個網站程式長時間運行後,速度變慢,重新啟動網站後速度明顯變快,估計是網站程式佔用的記憶體和CPU資源沒能及時釋放,才需要每隔一段時間重啟網站釋放資源。但手工重啟總不能算解決問題的方法,怎樣才能實現自動管理呢?IIS6.0的應用程式集區自動回收功能可以解決這一問題。
應用程式集區是將一個或多個應用程式連結到一個或多個背景工作處理序集合的配置。因為應用程式集區中的應用程式與其他應用程式被背景工作處理序邊界分隔,所以某個應用程式集區中的應用程式不會受到其他應用程式集區中應用程式所產生的問題的影響。
為Web程式配置應用程式集區需要以下步驟:1)建立應用程式集區,按右鍵“應用程式集區”,“建立/應用程式集區”,命名為KefuAppPool;2)為Web程式指定應用程式集區,在網站虛擬目錄屬性“應用程式設定”裡面的“應用程式集區(N)”裡選擇KefuAppPool;3)應用程式集區自動回收方式的設定。回收方式有如下幾種:
a.根據已耗用時間
系統預設是1740分鐘,也就是29個小時,這個不是很好控制,建議不用。
b.請求數目
這個要看具體的情況了。如果只有10個請求,可是有5個都在請求那個比較佔資源的頁面(可能是統計年度報表之類),這個時候就會出現進程當掉的情況,如果請求有1000個可是一個也沒運行比較佔資源的頁面,這個時候進程肯定是很正常的,所以根據請求的數目來決定也不一定符合實際需要。
c.計劃的時間
這個其實很好,不過具體什麼時間回收好呢?通常我們都是設定在淩晨兩三點鐘,這個時候回收是有必要的,不過針對出現隨時可能出現是高記憶體佔用並不是很適用。
d.記憶體(虛擬記憶體或已使用的記憶體)
這個針對出現記憶體問題引起的進程當掉實在太合適了,不過設定多大的值比較好是一個很重要的問題,值不能太小了,否則如果訪問量都很大超過這個值的時候也會自動回收,這個就很沒必要了。一定要多多觀察進程的實際佔用情況再做決定。
下面重點談談對背景工作處理序回收應用程式集區的理解。
預設情況下,WWW服務建立“重疊回收”,即繼續運行要終止的背景工作處理序,直到啟動新的背景工作處理序後為止。 在重疊回收方案中,要回收的進程繼續處理請求,同時 WWW 服務建立一個替代背景工作處理序。在停止舊背景工作處理序之前啟動新的背景工作處理序,然後將請求定向到新的進程。此設計可以防止服務中斷,因為舊進程關閉前仍然保持與 HTTP.sys 的通訊以處理請求。因為可重疊關閉或啟動的關閉逾時值是可以配置的,所以在背景工作處理序仍在處理請求的同時可以終止該進程(如果它在時間限制內沒有處理完請求的話)。
注意:當 WWW 服務回收某個背景工作處理序時,它並不斷開現有的 TCP/IP 串連。HTTP 協議堆棧 (HTTP.sys) 建立並維護 TCP/IP 串連。
IIS中的每個應用程式集區由一個“背景工作處理序”進行管理,也就是"W3wp.exe" 進程。如果有多個應用程式集區中的程式運行,我們就能看到多個w3wp.exe。這點可以在工作管理員中看到,如所示,工作管理員中有兩個w3wp.exe進程,恰好對應兩個有應用程式在啟動並執行應用程式集區。
在命令提示字元下運行iisapp -a,可以查看w3wp.exe和哪個應用程式集區關聯。
顯示了手動執行應用程式集區KefuAppPool的回收,在回收前,回收中和回收後應用程式集區和背景工作處理序情況。我們注意到:回收過程中增加了一個背景工作處理序(PID=3896),該背景工作處理序(PID=3896)啟動好後,舊的背景工作處理序(PID=5716)才被停止,新背景工作處理序(PID=3896)正式替代舊進程工作,這就很好的防止了應用程式集區回收過程中服務被中斷,保證了程式的連續運行。而其他兩個應用程式集區對應的背景工作處理序 PID都沒用變。該圖很好的展示了應用程式集區回收的過程。
應用程式集區這個東西著實讓管理伺服器的人頭疼,如果不設定好網站隨時有可能罷工,甚至拖累伺服器。因此特地找來此文章供大家參考。
另外說一點,如果網站訪問量不是很大,晚上沒什麼人訪問,可以嘗試淩晨重啟伺服器,這樣可以提高伺服器的速度,為第二天的訪問做準備。
IIS 6的核心在於背景工作處理序隔離模式,而應用程式集區則是定義背景工作處理序如何進行工作,因此,可以說應用程式集區是整個IIS 6的核心。
和IIS 5中只能使用單個應用程式集區不同,工作在背景工作處理序隔離模式的IIS 6可以建立多個應用程式集區,不同的應用程式集區之間是完全隔離的,某個應用程式集區停止服務時不會影響到其他應用程式集區。
在使用應用程式集區之前,你應該確定你所需要的應用程式集區數量。可能有很多朋友會認為,既然不同的應用程式集區之間是完全隔離的,那麼我只需要為每個Web網站建立一個應用程式集區就可以了。這個辦法在IIS伺服器上具有較少的Web網站數量時可以使用,但是如果IIS伺服器上具有很多Web網站數量,那麼這個辦法就不適用了,因為不同的應用程式集區在被訪問時都會建立各自的背景工作處理序,當大量的背景工作處理序並發工作時會消耗大量的系統資源和CPU利用率,反而會降低伺服器效能。你應該根據Web網站的重要性、隔離性、所運行代碼的安全性和穩定性等來對IIS伺服器上所具有的Web網站進行劃分,然後根據情況來決定所需要的應用程式集區數量。對於那些非常重要的Web網站、需要單獨隔離的Web網站、所運行代碼穩定性和安全性並不可靠的Web網站配置為使用各自獨立的應用程式集區,而將其他普通的Web網站配置為使用一個公用的應用程式集區。
預設情況下,在安裝IIS時會建立一個預設網站並建立一個名為DefaultAppPool的應用程式集區為其使用;預設配置下的應用程式集區已經可以很好的進行工作,建議你只有在特別需要時才對應用程式集區進行配置。
配置應用程式集區屬性
在IIS管理主控台中展開應用程式集區檔案夾,然後右擊對應的應用程式集區,點擊屬性,你可以在應用程式集區的屬性中進行以下配置:
回收
在回收標籤,你可以設定背景工作處理序的回收方式:
回收背景工作處理序(分鐘):在背景工作處理序運行多少分鐘後回收背景工作處理序,預設啟用,並且設定為1740分鐘(29小時);
回收背景工作處理序(請求數目):在背景工作處理序處理多少 個HTTP請求後終止此背景工作處理序,預設禁用,如果啟用則預設值為35000;
在下列時間回收背景工作處理序:在指定的時間回收背景工作處理序,預設禁用;如需啟用,勾選後點擊添加按鈕添加回收的時間即可,使用24小時制定義回收的時間;
消耗太多記憶體時回收背景工作處理序:
最大虛擬記憶體(兆):當背景工作處理序使用的虛擬記憶體達到設定的值時回收背景工作處理序,預設禁用,如果啟用則預設值為500 M;建議設定為不超過虛擬記憶體總數的70%;
最大使用的記憶體(兆):當背景工作處理序使用的實體記憶體達到設定的值時回收背景工作處理序,預設禁用,如果啟用則預設值為192 M;建議設定為不超過實體記憶體總數的60%;
另外需要注意的是,應用程式集區具有以下兩種背景工作處理序回收方式,不過這兩種回收方式均不會造成Web服務的中斷:
預設情況下,應用程式集區使用重疊回收方式。在這種方式下,當應用程式集區要關閉某個背景工作處理序時,會先建立一個背景工作處理序,直到新的背景工作處理序成功建立後才關閉舊的背景工作處理序;
應用程式集區也可以先關閉舊的背景工作處理序,然後再建立新的背景工作處理序。
如果Web 應用程式不支援多執行個體運行,那麼你必須配置應用程式集區禁止使用重疊回收方式。此配置無法在IIS管理主控台中進行修改,只能通過在 metabase.xml中修改對應應用程式集區的DisallowOverlappingRotation metabase屬性為true進行。
效能
在效能標籤你可以設定背景工作處理序的運行方式:
在空閑此段時間後關閉背景工作處理序(分鐘):當背景工作處理序空閑多少分鐘後關閉此背景工作處理序,這降低了空閑背景工作處理序對系統資源和CPU效能的消耗,預設啟用並且設定為20分鐘;
核心請求隊列限制為(請求次數):當HTTP.sys接收到某個用戶端發送的HTTP請求時,如果處理此請求的對應應用程式集區的背景工作處理序還處於忙狀態,則HTTP.sys將接收到的請求儲存在對應應用程式集區的請求隊列中,直到背景工作處理序空閑為止。此選項即用於設定此應用程式集區的請求隊列所能容納的請求數量,預設情況下每個應用程式集區的請求隊列限制為保留1000個請求,如果超出則向用戶端返回503錯誤,你可以根據需要適當進行修改,最大可以設定為65535。但是如果設定太大則會消耗大量的系統資源 ,而設定太小會導致用戶端訪問時頻繁出現503錯誤。
啟用CPU監視:監視此應用程式集區的CPU使用率,預設未啟用;如果某個應用程式集區佔用的CPU利用率過多,那麼可以通過配置此選項來限制此應用程式集區;
最大CPU使用率(百分比):所設定的應用程式集區所能使用的最大CPU使用率;啟用CPU監視時預設值為100;
重新整理CPU使用率(分鐘):重新整理CPU使用率的間隔時間;啟用CPU監視時預設值為5;
CPU使用率超過最大使用率時執行的操作:當此應用程式集區的CPU使用率超過所設定的最大CPU使用率時所進行的操作,啟用CPU監視時預設為無,此時IIS只是在事件記錄中進行記錄而不進行其他動作;如果選擇為關閉,那麼IIS將關閉此應用程式集區中的所有背景工作處理序;
Web園:在Web園中你可以配置此應用程式集區所使用的最大背景工作處理序數,預設為1,最大可以設定為4000000; 配置使用多個背景工作處理序可以提高該應用程式集區處理請求的效能,但是在設定為使用多個背景工作處理序之前,請考慮以下兩點:
每一個背景工作處理序都會消耗系統資源和CPU佔用率;太多的背景工作處理序會導致系統資源和CPU利用率的急劇消耗;
每一個背景工作處理序都具有自己的狀態資料,如果Web應用程式依賴於背景工作處理序儲存狀態資料,那麼可能不支援使用多個背景工作處理序。
健全狀態
在健全狀態標籤你可以配置應用程式集區監視背景工作處理序的健全狀態,
啟用Ping:預設情況下應用程式集區配置為每隔30秒Ping背景工作處理序,當背景工作處理序沒有進行響應時,則認為此背景工作處理序出現故障並預設配置為關閉此背景工作處理序。你可以修改Ping的時間間隔,但是太長的Ping間隔可能會導致Web服務的中斷,而太短的Ping間隔又會消耗更多的系統資源和CPU利用率,因此建議你保留預設配置;
啟用快速失敗保護:如果Web應用程式代碼編寫有問題,它可能會導致背景工作處理序持續出現問題。預設情況下應用程式集區配置為啟用快速失敗保護,當背景工作處理序在配置的時間段(預設為5分鐘)內發生的失敗次數超過了配置的值(預設為5次),則禁用此應用程式集區。
啟動時間限制:IIS等待屬於此應用程式集區的背景工作處理序啟動的時間,當背景工作處理序啟用時間超出此設定值時,IIS會在事件記錄中進行記錄;
關閉時間限制:當IIS檢測到某個背景工作處理序出現故障時,將此背景工作處理序標記為關閉,此選項指定了IIS等待背景工作處理序自動關閉的時間限制,如果超出此時間限制後背景工作處理序尚未關閉,則IIS強行關閉背景工作處理序。
標識
在標識標籤,你可以配置背景工作處理序所啟動並執行使用者賬戶。在IIS 5或者當IIS 6運行在IIS 5隔離模式時,背景工作處理序運行在本地系統賬戶,而運行在背景工作處理序隔離模式下的IIS 6的背景工作處理序運行在網路服務賬戶下,這降低了系統被攻擊的可能性。
你可以配置背景工作處理序運行在預定義的本地系統、本地服務或網路服務賬戶下,也可以配置為使用某個自訂的使用者賬戶。建議使用預設的網路服務賬戶;不過如果為了更高的安全性,可以配置使用自訂的使用者賬戶,不過建議你只是將此自訂使用者加入到IIS_WPG使用者組中,因此IIS_WPG使用者組包含了可以啟動和運行背景工作處理序的最小許可權。
1)在工作管理員中增加顯示pid欄位;2)在命令提示字元下運行iisapp -a。注意,第一次運行,會提示沒有js支援,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程式集區。如左側所示,應用程式集區 KefuAppPool和PID=3232的w3wp.exe相關聯,應用程式集區ReportServer和PID=3572的w3wp.exe相關聯.