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