IIS 6.0 應(yīng)用了新的進(jìn)程模型。內(nèi)核模式的HTTP偵聽(tīng)程序(Http.sys)接收并發(fā)送HTTP請(qǐng)求(甚至可以使用它的響應(yīng)緩存來(lái)滿足請(qǐng)求)。工作進(jìn)程注冊(cè)URL子空間,Http.sys將請(qǐng)求發(fā)送到相應(yīng)的進(jìn)程(如果使用應(yīng)用程序池,則發(fā)送到進(jìn)程集合)。
圖 4 展示了IIS 5.0和IIS 6.0進(jìn)程模型之間的差異。IIS 5.0使用WinSock在端口80接受連接。請(qǐng)求由 inetinfo 進(jìn)程負(fù)責(zé)接收,然后或者在進(jìn)程內(nèi)執(zhí)行請(qǐng)求,或者將它交給dllhost 進(jìn)程在進(jìn)程外進(jìn)行處理(為了達(dá)到隔離的目的)。響應(yīng)則由 inetinfo 進(jìn)程發(fā)送回去。
IIS 5.0 和 IIS 6.0 的進(jìn)程模型
IIS 6.0 進(jìn)程依賴于內(nèi)核模式的Web驅(qū)動(dòng)程序Http.sys。在新的模型中,Http.sys負(fù)責(zé)管理連接和處理請(qǐng)求。請(qǐng)求可能通過(guò)Http.sys緩存得到滿足,也可能被交給一個(gè)工作進(jìn)程以便得到進(jìn)一步處理(見(jiàn)圖5)。可以配置多個(gè)工作進(jìn)程,從而以較低開(kāi)銷實(shí)現(xiàn)了隔離。
Http.sys包括了一個(gè)響應(yīng)緩存。當(dāng)請(qǐng)求與響應(yīng)緩存中的某個(gè)條目相匹配的時(shí)候,Http.sys直接從內(nèi)核模式中發(fā)送緩存響應(yīng)。圖5展示了請(qǐng)求通過(guò)Http.sys得到處理的情況(請(qǐng)求也可能向上交給某個(gè)工作進(jìn)程進(jìn)行處理)。
IIS 6.0中的請(qǐng)求處理
由于Web服務(wù)器既包括內(nèi)核模式的組件,也包括用戶模式的組件,必須對(duì)二者同時(shí)進(jìn)行調(diào)整才能獲得最佳性能。因此,針對(duì)特定負(fù)載的IIS 6.0調(diào)整工作需要對(duì)如下內(nèi)容進(jìn)行配置:
· Http.sys(內(nèi)核模式驅(qū)動(dòng)程序)以及相關(guān)的內(nèi)核模式緩存。
· 工作進(jìn)程和用戶模式IIS,包括應(yīng)用程序池配置。
此外,我們還將在后文中討論會(huì)對(duì)性能造成影響的其他參數(shù)。
與性能有關(guān)的Http.sys設(shè)置可以劃分為兩類:緩存管理以及連接和請(qǐng)求管理。所有的注冊(cè)表設(shè)置都保存在以下條目中:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHttpParameters
如果HTTP服務(wù)正在運(yùn)行,必須首先停止服務(wù),然后重新啟動(dòng)計(jì)算機(jī),以便讓設(shè)置生效。
緩存管理設(shè)置
Http.sys具有的優(yōu)點(diǎn)之一便是內(nèi)核模式緩存。如果響應(yīng)位于內(nèi)核緩存中,那么可能可以完全通過(guò)內(nèi)核模式來(lái)滿足某個(gè)HTTP請(qǐng)求,這顯然可以極大降低CPU處理請(qǐng)求的開(kāi)銷。但是,IIS 6.0的內(nèi)核模式緩存是一種基于物理內(nèi)存的緩存,每個(gè)條目都需要占用一定的內(nèi)存空間。
緩存中的條目只有在被使用的時(shí)候才能提供益處。但是,條目在任何時(shí)候都會(huì)占用物理內(nèi)存,不論它是否被使用。所以,需要對(duì)緩存某個(gè)項(xiàng)目帶來(lái)的益處(能夠直接從緩存中滿足請(qǐng)求)以及它在整個(gè)生命期中的開(kāi)銷(需要占用物理內(nèi)存)進(jìn)行評(píng)估,并且考慮可用資源(CPU、物理內(nèi)存)和工作負(fù)載的情況。Http.sys 試圖僅在緩存中保存有用(經(jīng)常被訪問(wèn))的項(xiàng)目,但是,如果針對(duì)特定工作負(fù)載來(lái)調(diào)整Http.sys緩存,Web服務(wù)器的性能還可以獲得一定程度的提高。
以下是一些有用的Http.sys內(nèi)核模式緩存設(shè)置:
· UriEnableCache. 默認(rèn)值:1。設(shè)為非零值可以啟用內(nèi)核模式響應(yīng)和分段緩存。對(duì)于大多數(shù)工作負(fù)載,緩存都應(yīng)該保持啟用。如果希望獲得超低響應(yīng)和較低的緩存利用率,那么請(qǐng)考慮禁用緩存。
· UriMaxCacheMegabyteCount. 默認(rèn)值:0。設(shè)為非零值可以指定內(nèi)核緩存可以使用的最大內(nèi)存數(shù)量。默認(rèn)值為0,允許系統(tǒng)自動(dòng)調(diào)節(jié)緩存能夠使用的內(nèi)存數(shù)量。注意:只能設(shè)置可以使用的最大內(nèi)存數(shù)量,而且系統(tǒng)可能不允許緩存增長(zhǎng)到指定的大小。
· UriMaxUriBytes. 默認(rèn)值:262144 字節(jié)(256 KB)。本參數(shù)設(shè)定了內(nèi)核緩存中每個(gè)條目的最大長(zhǎng)度。大于這個(gè)長(zhǎng)度的響應(yīng)或分段都不會(huì)被緩存。如果有足夠的資金,可以考慮增加此參數(shù)的值。如果資金有限,而且大型的條目會(huì)擠掉較小的條目,那么可以將本參數(shù)設(shè)為更小的值。