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